Jump to content

Leaderboard

  1. Kit the Human

    Kit the Human

    8-bit Patron


    • Points

      29

    • Posts

      934


  2. Morrigan

    Morrigan

    Admin


    • Points

      28

    • Posts

      27,258


  3. Arceus

    Arceus

    Initiate


    • Points

      18

    • Posts

      1,254


  4. Sadrienne

    Sadrienne

    Initiate


    • Points

      17

    • Posts

      0


Popular Content

Showing content with the highest reputation since 01/02/2014 in Guides

  1. Why this article? First and foremost rules are likely the most important thing to a potential member on your site. The rules set a precedent for how your site is run and how you as an admin will approach a subject that comes up. It seems like it should be simple, that rules are common sense and that people will just obey, however it's not so simple and I hope that this article helps you with finding the correct voice with coming up with your rules. What to think about! When you come up with your rules there are things that you should think about and then things to consider once you've written them. I never recommend writing your rules, cleaning up the text and posting them. I always recommend reflecting and having someone review them before they are posted (preferably a person that can be objective about them). Some of the things that you should consider when writing your rules: What sort of admin do I want to portray myself as? How do I want the potential members to feel? Do I really need this rule? Once you've figured out some of these (and they will likely change and alter as you read through this) then you've started your journey into having respectable rules. What the rule means to you doesn't mean that rule means the same thing to me! Just because the rule makes sense to you doesn't mean it is. Additionally, just because the rule seems funny/smart/clever etc to you doesn't make it so. Write your rules as if you plan for a teacher or parent to read them and you need to get the point across, not as if you are talking to your friend telling them about what you're expecting people to follow. The Don'ts Some of these are personal peeves, some of these are just recommendations and some are just things that you should likely avoid. I can tell you, from my experience, that if it hasn't sent me away it has likely sent someone away from your site. Don't use the rule "Don't be a dick" or any variation thereof. While Wil Wheaton has said it and god he's so awesome (sarcasm included) it doesn't mean this is a blanket term that you should use in your rules. In fact, including this rule has the affect to immediately set people off and in a bad mood.. My first reaction to such a phrase is "click the X button, this admin is a dick". While the latter is not always true it doesn't negate the negative tone that it immediately puts into the head of the reader. This coincides with rules like "be respectful" "have fun" and others. These rules mean different things to different people so word them better or don't put them in there. Don't use "not". I'm using the words don't and not in this article ironically. People hate reading the word "not" or the variations of the word "not" and so avoiding it in your rules is key. Use your awesome vocabulary (or thesaurus for those of us like me that have a terrible vocabulary) and use other words that aren't not. Prohibited, banned, forbidden are some of your best friends when writing rules. Think of your rules like talking to a rebellious teen. The more you tell them not to do it, the more likely they will WANT to do it. Don't write your rules as if you're talking to someone. Nothing looks more childish than if you talk to the person on the other end of the screen through your rules. "You're not allowed to do this and if you do we will slap you with a fish." It makes the staff seem inexperienced and, honestly, moronic. You sound like you're standing on a playground telling other kids how they have to use the monkey bars and how if they fall they fell in lava and can't get back on. It's unnecessary. Don't waffle. Waffling is the inability to make a decision. Make a decision and stand firm in it. Waffling gives people the impression you don't actually know if what you chose is the right decision and so you are trying to make it seem like it was but wasn't your decision. The most common rule that this is applied to is word count rules "This is a no word count site BUT you must post more than 1 sentence". If you have to put the word "but" in your rule then you don't have a firm rule. Using the word count example either you are "no word count" or you are a "one sentence minimum" site. You can't be both and you don't want to be both. Make a decision and stick to your guns. Don't make silly restrictions. From "Usernames must be in all caps" to "no duplicate names" to "your character must have a middle name" to "playbys real age must be within 5 years of your characters age" (note: this last one has an additional note in the "JSYK" section) these are all useless, needless restrictions that are made for no reason other than to micromanage your players. None of these rules have a real purpose and are often used as a control mechanism to see how closely people are paying attention to your rules. These sorts of things members may still join regardless of but they are annoying and frustrating and put an unnecessary hurdle in the way of a new member joining your site. Joining a site should be simple. Don't make RP feel like a chore or burdening. Requiring specific chat programs, templates, special codes, etc. These things make RP less of a hobby and more like a daily chore. Require only what is needed to make your members happy and your site flourish. Never sacrifice the happy though. Don't be too inclusive. Don't take this the wrong way but being too inclusive can be just as much as a put off as being too exclusive. There are many things that make some people feel included and a part of the site as much as push another demographic away from sites. I will state, while I have no issue with the LGBT+ community I find pronouns to be exclusive to that community which makes me feel excluded from communities that require them. However on the flip side not having those could do the reverse to someone that is LGBT+. These should be your personal preference and not influenced by the community at large. Don't threaten your members or potential members. "DO THIS AND YOU WILL BE BANNED!" it feels like living under WW2 Hitler and who wants that? Just provide the rules clearly and then from there you choose the punishments from the administrative side. Your non-staff people don't need to know how you deal with oath breakers. Rules like this often make the staff seem juvenile and inexperienced. Don't force ratios. No one likes them, good sites will balance out naturally and really they just piss people off. Restricting a type of character should be plot defining/breaking not annoying to keep numbers within a spectrum. Members that don't want to play the other type of character will fill their ratio and never create another character. The unfortunate part for you is that this player may have given you more active characters but your restriction limited them so they had to stop. Don't put silly limits on characters. This goes with the above. Restrictions on character amounts, character types (unless it's setting breaking) is just silly. I know that you're trying to mitigate the fall out if that person leaves but really, there is going to be fallout regardless. Just let them be creative, you'd be surprised at how good of a member some of those chronic character makers are. Don't require post templates. They are tedious and annoying to most. People that just want to roleplay will find it daunting and eventually just give up. Don't make rules for the possibilities. If you're thinking of all the potentially bad things that could happen if you don't add the rule then you may need to think about how you are portraying your rules to members. Your rules should cater toward the crowd you want, not the crowd that you think you might get. Now these aren't hard and fast rules to live by. If you have a don't in your rules but you like it, have at it. It's your site for a reason. The Dos Now dos are really subjective and there aren't as many because really if you avoid the don'ts then you are often in a good position with your rules. These all depend on the community you want to pull in and how you want to portray yourself to your members and your potential members. Not all of these dos will apply to every circumstance but they are a good rule of thumb. Make sure your rules are clear. Not every rule needs an explanation if it's stated correctly and elaborating too much often causes confusion. Make sure that you include the basics. While your ad may say "no word count" it doesn't mean that's how someone got to your site. Make sure you always include things like your word count, rating, your OOC account restrictions, whether you are an APP or APC site, whether you allow art for playbys etc. These things are immediate go or no-gos for potential members hiding them or making them difficult to find is a turn off. Make sure the voice in your rules is the voice you want people to hear. If you sound like a dictator people will think you're a dictator. If you sound professional people will think your professional. This is all in the wording of your rules and how you portray you and your staff. Make sure your fears of the worst are kept away from the rules. When you put your fears and start banning things without having a reason to this often can mean that you are paranoid. Paranoid staff members don't make for good staff members as they always look for what someone is doing wrong and is highly likely to push members away. When something you fear comes up, deal with it then, not in the rules. Ask for someone to read over your rules. This is important because when you write your rules you are normally happy with them, however some things may be unclear. Having a second or third set of eyes look them over will help you figure out the holes in your rules. I hope this helps you get more members and stop pushing away potentials through poorly written/conveyed rules. If you have a suggestion for a do or don't feel free to post a comment below and I will review it. JSYK Playbys can span many different ages, especially in the age of television and media. Many Playbys have been acting for most of their life so forcing a rule that disallows the use of a younger version of a playby is silly. Lets take some people that span ages: Michelle Trachtenburg (Harriette the Spy) Drew Barrymore (ET) Chloe Grace Moretz (The Amityville Horror) Leonardo Decaprio (Growing Pains) Seth Green (Big Business or My Step Mother is an Alien) Elijah Wood (The Good Son) Sean Astin (The Goonies) Sean Connery (Pretty sure he's a vampire and hasn't aged in a century since he was turned) And these are just a few actors/actresses that have went from young ages to adults in their span of acting. It should be perfectly fine to play them from any era of their life as long as the character matches the age. This sort of rule also negates classic playbys from movies older than the 80s where the actors are in their 80s-90s but their acting career was in their 30s.
    8 points
  2. To get started, set up a couple of custom profile fields. For the purposes of this exercise, we're going to use the following: Character Faction Character Age Character's Playby I strongly recommend that Character Faction is a drop down selection, the script relies on everyone using the same spelling and capitalisation. Example: Character Age and Playby does not need any special settings. Save your custom profile fields and take note of their numbers. In my case they will be: Character Faction - <!-- |field_21| --> Character Age - <!-- |field_2| --> Character Playby - <!-- |field_17| --> Go to your HTML templates. We need to edit the following: Member List Headers - this is the container that every member sits in within the member list. Member List Header variables Member List Row - this is every individual member listed in the member list. Member List Row variables Member List Header - HTML and Javascript Paste the following: <!-- START SORT BY --> <h3>Sort by:</h3> <div id="sorts" class="button-group"> <button class="button is-checked" data-sort-by="original-order">original order</button> <button class="button" data-sort-by="face">Face Claim</button> <button class="button" data-sort-by="age">Character Age</button> </div> <!-- END SORT BY --> <!-- START FILTERS --> <div class="filters"> <div class="ui-group"> <h3>Filter by Character Faction</h3> <div class="button-group js-radio-button-group" data-filter-group="species"> <button class="button is-checked" data-filter="*">show all</button> <button class="button" data-filter=".Good">The Good Guys</button> <button class="button" data-filter=".Evil">The Bad Guys</button> </div> </div> <!-- ADDITIONAL FILTER GROUPS, COPY AND PASTE THE BELOW OUTSIDE OF THE COMMENT TAGS --> <!-- <div class="ui-group"> <h3>Filter by YOUR STUFF HERE</h3> <div class="button-group js-radio-button-group" data-filter-group="UNIQUE-DATA-FILTER-GROUP"> <button class="button is-checked" data-filter="*">show all</button> <button class="button" data-filter=".YOUR_WORD_HERE">DISPLAYED WORDS</button> <button class="button" data-filter=".YOUR_WORD_HERE">DISPLAYED WORDS</button> </div> </div> --> </div> <!-- END FILTERS --> <!-- A RESET BUTTON --> <p class="resetme"><button class="button button--reset">Reset filters</button></p> <!-- END RESET BUTTON --> <!-- END FILTERS --> <div class='grid'> <% MEMBERLIST_ROWS %> </div> <!-- |pages| --> <script src="https://unpkg.com/isotope-layout@3/dist/isotope.pkgd.js"></script> <script> $(document).ready(function() { var $grid = $('.grid').isotope({ itemSelector: '.grid-item', layoutMode: 'fitRows', getSortData: { age: '.age parseInt', face: '.face', // ADD ADDITIONAL FILTERS HERE WORD CORRESPONDS WITH DATA SORT BY WORD ABOVE // IGNORE EVERYTHING BELOW HERE category: '[data-category]', weight: function( itemElem ) { // function var weight = $( itemElem ).find('.weight').text(); return parseFloat( weight.replace( /[\(\)]/g, '') ); } } }); // store filter for each group var filters = {}; $('.filters').on( 'click', '.button', function() { var $this = $(this); // get group key var $buttonGroup = $this.parents('.button-group'); var filterGroup = $buttonGroup.attr('data-filter-group'); // set filter for group filters[ filterGroup ] = $this.attr('data-filter'); // combine filters var filterValue = concatValues( filters ); $grid.isotope({ filter: filterValue }); }); // bind sort button click $('#sorts').on( 'click', 'button', function() { var sortByValue = $(this).attr('data-sort-by'); $grid.isotope({ sortBy: sortByValue }); }); // change is-checked class on buttons $('.button-group').each( function( i, buttonGroup ) { var $buttonGroup = $( buttonGroup ); $buttonGroup.on( 'click', 'button', function() { $buttonGroup.find('.is-checked').removeClass('is-checked'); $( this ).addClass('is-checked'); }); }); var $anyButtons = $('.filters').find('button[data-filter=""]'); var $buttons = $('.filters button'); $('.button--reset').on( 'click', function() { // reset filters filters = {}; $grid.isotope({ filter: '*' }); // reset buttons $buttons.removeClass('is-checked'); $anyButtons.addClass('is-checked'); }); // flatten object by concatting values function concatValues( obj ) { var value = ''; for ( var prop in obj ) { value += obj[ prop ]; } return value; } }); </script> The first section is the sort by buttons. These are what will rearrange the order in which member's are displayed. The most important thing here is data-sort-by="face" take note of the word used in the data-sort-by attribute. The second section is the filter buttons. These are what will make users vanish from view (filtered out) when they do not meet the filter requirements. The most important thing here is data-filter=".Good" take note of the word used in the data-filter attribute. The third section has a handy reset button, allowing your users to put all characters back into view. The fourth section contains the actual members and the container that they will sit within. The div class is important here because it is referred to by the script. Fifth section is the pages button and this is sadly the memberlist's biggest weakness. You can only display so many users on a page and the script will not load more that for you. All the script does is sort information that is already there, it doesn't retrieve any additional data. Infinite scroll is also not doable on Jcink due to the way it needs to be set up. I would love to be proven wrong though. I'll address a work around for that later in this guide. The Sixth and final section is the script. The following script source links directly to isotope's website, I strongly recommend downloading a version yourself and uploading it to your site. Use your site link for the script source. <script src="https://unpkg.com/isotope-layout@3/dist/isotope.pkgd.js"></script> You must have this (or the version on your site) linked before the script in order for it to run properly. I recommend just putting it on the member header template just because you don't need to run the script anywhere else. If you prefer, you can add it to your global wrapper in the usual spot. The magic is between <script> and </script> The first line is telling the script to not execute until the entire page has loaded. The next bit is telling what div to act execute the isotope on. If you have changed any of the class names in your HTML, you will need to read through the script and change to the appropriate class. If you want to save yourself the hassle, just use the same class names I use. I'll go into the script in more detail when I describe how to add more sort by buttons. Member List Row - HTML Paste the following into your member list row <div class="grid-item member <!-- |field_21| -->"> <div class='avatar'> <!-- |avatar| --> </div> <div class="name"> <!-- |name| --> </div> <ul> <li class='age'> <!-- |field_2| --> </li> <li> Faction: <!-- |field_21| --> </li> <li class='face'> Face Claim: <!-- |field_17| --> </li> </ul> </div> Substitute your custom profile field numbers as necessary. If you save the templates now and check out your member list, you'll see that it's now working! It also looks like pants, but you can fix that with a bit of CSS magic 🙂 How to Add More Filters To add a filter, do the following: Go to the member list row Add the appropriate variable to grid-item member <!-- |field_21| --> so, if you want to add another filter and it's variable is 22, you should have div class="grid-item member <!-- |field_21| --> <!-- |field_22| -->" Make sure that there are spaces between each variable! Save Go to the member list header Add the following before </div> <!-- END FILTERS --> <div class="ui-group"> <h3>Filter by YOUR STUFF HERE</h3> <div class="button-group js-radio-button-group" data-filter-group="UNIQUE-DATA-FILTER-GROUP"> <button class="button is-checked" data-filter="*">show all</button> <button class="button" data-filter=".YOUR_WORD_HERE">DISPLAYED WORDS</button> <button class="button" data-filter=".YOUR_WORD_HERE">DISPLAYED WORDS</button> </div> </div> Substitute .YOUR_WORD_HERE with what the potential input for that variable might be. For example, the Faction variable I created earlier had two potential inputs, Good and Evil (capitalisation IS important). So WORD is replaced with .Good and the next button has .Evil after data-filter= You should also rename the data-filter-group (where it says UNIQUE-DATA-FILTER-GROUP) Save! Done! How to Add More Sorts Go to the member list row Add the custom field variable to where you want it to appear, and then wrap it in an element with an unique class name. For example, if you want to add player names to the sort button, you could put them in a h3 class like so: <h3 class="playername"><!-- |field_XX| --></h3> Memorise what the class name is Save Go to member list header Add this <button class="button" data-sort-by="CLASS-NAME">WORDS TO DISPLAY</button> before </div> <!-- END SORT BY --> Using the player name example would mean you would put in: <button class="button" data-sort-by="playername">Player</button> Scroll down to the script and find the following: getSortData: { Press enter and add the following after the curly bracket CLASS-NAME: '.CLASS-NAME', Take note that there is a comma at the end of the line. Leave it off? Script stops working. Using the player name example would mean you would end up with the following: getSortData: { playername: '.playername', // rest of the stuff here Save Done! Note: use the age sort as your guide on how to set up any other sort by numbers in the sort by. If you want to sort by height, make your users use metres (1.7 rather than 5'5 because the apostrophe will spoil your script) and change parseInt to parseFloat. In saying that, making your user's type 5\'5 ought to save your script, if someone makes a mistake however you will need them to correct it in order for the script to continue functioning. Safest just to use decimal points. How to add a label to numbers If you want to sort by a number, your class to sort can only contain a number. For example, age looks like this: <li class='age'> <!-- |field_2| --> </li> We will use CSS to fix this: .age::before { content: 'Age: '; display: inline } Save and Done! A Cheat to Display More Members As noted, the biggest disadvantage of using the sort and filter script is that it can not retrieve data from another page. So when a user clicks on the member list, we want them to automatically see as many characters as possible. The most allowable by Jcink is 50. So, make your own link to the member list and make it the following URL: YOUR_BOARD_URL_HERE/index.php?&act=Members&photoonly=&name=&name_box=all&max_results=50&filter=ALL&sort_order=asc&sort_key=name&st=0 Done! Another thing to consider is using the Hide this group from the member list? option in the user group settings to your advantage. For example, consider only having accepted and active character accounts displayed on your member list, rather than having inactive and unaccepted character accounts clogging up the list. I wish there was a more elegant solution to this! If anyone has found a solution that works for them, I would love to hear about it. Even if this isn't the member list code for you, I hope that it's given you some ideas on what you can do with the member list template! Visit the isotope website to find out what else you can do with the script!
    5 points
  3. Today, we'll be coding this: Or at least, making something very similar. I created this a long time ago for my fantasy site's historical timeline. It is entirely CSS and HTML, and you may need to fiddle with the precise numbers, but for the most part, it should be pretty straightforward. So to get started, we want a container div. You can call this container div whatever you'd like, but mine calls it timeline_container. We want this to have a relative position, and you'll probably want to set a max-width and ensure it margins 0 auto so that it centres. .timeline_container { position: relative; max-width: 1200px; margin: 0 auto; } To create the timeline bar, we create a pseudo selector for .timeline_container::after - or whatever it is you called your timeline container. Set it to position absolute, a width, and then position absolute, top and bottom at 0, and left at 50%. You may need to fiddle with positioning a bit using margining. .timeline_container::after { content: ''; position: absolute; top: 0; bottom: 0; left: 50%; width: 6px; background-color: #808080; } By the way, #808080 is exactly 50% saturation grey, so you can usually see it okay on both light and dark themes. Now, we have our bar. We need to create a box that we can use to show events on either side of this centre vertical bar. We're going to use basically the same box, and just add a second class to it that alters positioning, so that we have "containerclass positionclass" for classing. Let's call this container class .timeline_box. I gave mine 10px 40px padding, a 50% width, inherited background, and a relative positioning. We won't be creating the appearance styling for the boxes in this part, but in an inner content class in a minute. .timeline_box { padding: 10px 40px; position: relative; background-color: inherit; width: 50%; } There is a pseudo-selector we need to use on timeline_box, this being ::after. This will create the dot on the timeline. We set this to position: absolute, 25px width and height, give it a background colour and, if desired, a border, z-index 1 and top and right positioning to get it where we want. Mine ended up top 15px and right -14px, but this didn't hold up recreating it elsewhere, so you will most likely need to mess with it. .timeline_box::after { content: ''; position: absolute; top: 15px; right: -14px; width: 25px; height: 25px; background: #222; border: 4px solid; border-radius: 50%; z-index: 1; } You might notice here that I have a border but no colouring. This is because I added other classes to colour-code the dots by era and so I set the border-colour elsewhere, so if you're not going to be doing that, you may want to set the border colour here. Next, we need to create the box positioning. We do this with two other classes, called .timeline_left and .timeline_right. These are very simple classes, all they have in the CSS for them is left: 0 and left: 50%. Now, it seems like you would create timeline_right with right: 0; but right: 0 is in a place we aren't expecting, and places the timeline box also on the left side. With the .timeline_left and .timeline_right classes, we'll add ::before pseudo-selectors to create arrows. These will point at the dot on the timeline and make it look a little fancier. You can skip this if you don't feel the need for these. .timeline_left::before { content: ''; position: absolute; height: 0; width: 0; top: 22px; right: 30px; z-index: 1; border: medium solid white; border-width: 10px 0 10px 10px; border-color: transparent transparent transparent #343434; } .timeline_right::before { content: ''; position: absolute; height: 0; width: 0; top: 22px; left: 30px; z-index: 1; border: medium solid white; border-width: 10px 10px 10px 0; border-color: transparent #343434 transparent transparent; } Again, you will likely have to fiddle with the positioning. Now, the last piece of the puzzle is to create the box itself. We'll call this internal box .timeline_content. Padding, a background colour, position relative, and a 6px border radius ought to do the trick. .timeline_content { padding: 10px 15px; background: #343434; position: relative; border-radius: 6px; } Remember that whatever you make the content box's background will have to be the same colour as on the non-transparent bordering of _left::before and _right::before. Here you'll likely find that you need to fiddle with the positioning finally, if you haven't already, as you find the results are a little out of alignment, but you should eventually have something like this. And there we go. That's all there is to it. c: You can add embellishments and colour code your timeline if you'd like, I colour-coded mine by era and added a pulsating CSS animation effect on the timeline markers, but it's up to you what you do from here! Have fun! (This was a terrible tutorial, I'm half awake, sorry. xD)
    5 points
  4. Before I go into why I think you should consider whether or not you want to continue link backing in the future, I want to touch on the ways that it does work. Active Advertiser = Active Site There is a belief within the community that a forum that is actively advertising across the stratosphere is an active forum; and that a commitment to advertising is a reflection of the admin's commitment to their community. I debate the validity of that belief - after all how many times have you gone to link back to find that the forum is dead? The belief however is out there, and you might feel that capitalising on that belief outweighs the potential drawbacks to link backing. Advertising regularly = Users remember you If you have saturated the market and continue saturating the market with your ads, users and admins are going to remember you. They'll definitely remember you if there is something about your forum that they're curious about, but maybe they don't have the time to commit to another forum at that time. Should their current forum fall under, they may go directly to your site to give it a thorough look over. It does get you members Link backing can yield some legitimate non-admin traffic, and some of that traffic can be converted into active members. In this guide, I am not claiming that link backs are completely ineffective. I am however, querying if it is effective enough. Now to the true purpose of this guide! Most of you are probably already adherents to the link back faith, so let's focus on ways that it doesn't work, and may be harmful to your site. It may harm your search result ranking The theory of link backing is this: A site that links to your site is a vote of confidence (assuming a no follow value is not used), by having numerous votes of confidence, google takes note and increases your search result ranking. This is why spam bots join a forum and create posts that are full of links. It's not so much about getting users to click through (though sweet if they do), but about using your site to increase their ranking. There are other ways to inflate your ranking using links, not just bots. They're called link schemes. In June of 2018, Google reported that they "doubled down [their] effort in removing unnatural links via ranking improvements and scalable manual actions." Source (Google) This is where you should consider what a link scheme is, as it falls under the umbrella of "unnatural links". Source (Google) Potentially therefore, the link back exchange we have going on in the roleplay world is simply be ignored when it comes to google building an impression of your site. (In 2016, link backing might have been devaluing your links) Therefore, if you are dropping links in the hopes of building your search engine ranking, rethink this. It's probably not having any effect. It may have a detrimental effect on your search engine results To demonstrate this, I googled a bunch of random sites, adding jcink on the end because none of the sites I googled would get me their forum through their name alone. If the site is not on jcink, I switched jcink to roleplay. First result is to their first link forum and is showing text describing another site. First result was to the correct site, but it was directly to someone's advertisement. As I said in the image, I was worried that I was forcing that result by putting jcink in there. So I googled [site name] roleplay. The result was a book. The site I was looking for was not on the first page of results. This time we hit the right site! Some things to note however, they're a secure site and they do not have many advertisements. Another jackpot! These guys have a unique name however, which strongly helps when searching for them. Again, searching for this site took me to another person's forum but to that particular person's ad. If I switch the search terms to [site name] roleplay, I get Dungeons and Dragons related sites. If I change it to [site name] forum roleplay, I get Dungeons and Dragons related forum topics. There were a number of sites that I simply couldn't get to display when searching for them. For many that I did get to display, the link was taking you to another site. If I google forum roleplay, the only site I get is a reddit thread with an ad for a site that is part of this community. Not a single first page result involved a link back exchange. If you have hundreds of links going to your site, and if link backing was an effective technique, wouldn't it be easier to find you? As it stands, I have to search for the site name to get close to your site, and more often than not I'm going to get someone else's forum, or people advertising on your site. Let's switch my terms to jcink roleplay. I still don't get actual sites. I get tumblr. You're advertising to people who already have a 'home' So, I have yet to find any evidence that link backing improves your search ranking results and more often than not, spoils when you might get a result. So that leaves us with the point of advertising: getting members. Except by focusing your attention on link backing, you're targeting users that already either have a 'home,' or are managing their own 'home.' Whilst I have noted that it is possible to gain a few users through link backing, you don't get many and that's because the platform you're focusing your energy on is only regularly used by admins looking for more places to drop their links. Your target audience: people who are looking for a place to roleplay. They're probably not scouring link back forums for that place to roleplay. It's inefficient Linking is tedious. Captcha is tedious. Finding the right forum to post in is tedious. Loading all of those slow sites is tedious. It's a laborious process that is only soothing in it's repetition. You spend hours farming other people's sites to drop your advertisement and for those hours you spend, you get....a handful of members? Quite simply, is the amount of time you spend doing this worth the number of people you get? Link backing is a practice that should be properly interrogated for effectiveness. The practice is a link scheme, and google ignores sites that show evidence of participating in such a thing. It spoils your search results should you get a result, often leading users to different sites or displaying information for another site. It also targets the wrong audience and finally, it's inefficient. Given all of that, is it worth it? That's entirely up to you. Resources: Moz - Link Explorer - you have to register but you can see what the spam ranking of sites linking to you are. Google Search Console - gives you some information about your google search ranking. Google Analytics - you can see what browsers and devices your users are using, and how people are getting to your site. Beginner's Guide to SEO - this guide provides some solutions to the problems I've posed. Spoiler alert: the solutions are not easy. This guide will also expand on some of the things I've touched on, such as the importance of having a secure site. Another spoiler: google actively devalues insecure links. Moz - SEO Learning Centre - same site as above, but with a few more topics for you to explore should you be interested.
    5 points
  5. So the Character Mod will likely hold all of your character's information. It's a matter of pulling that information out and being able to utilize it elsewhere to make lists. Below is the code for a Playbys list however can work for other things. With the new version of the Character Mod it is not required to do this for groups as the Character List allows you to filter by groups now. So first things first, you need to create your custom field for the plaby/faceclaim that your users will be able to edit and add their plaby into. If you already have this then skip to the next step. To do this you need to go to Community > Characters > Custom Fields > Create New > Create a Text Field. Whether you show it in the posts or profile or not is irrelevant. In our example below the key we use is "playby" so you need to use this or make sure to change it in the code. Once you have this created you need the field ID. To find this you can mouse over the field, by going to the edit page and looking at the URL or copy and pasting the URL into your favorite editor. That ID is what you'll replace the # with in the below code into an HTML block in Pages (Pages > Blocks > Create New > Custom HTML): <div class='ipsPad'> <h2 class="ipsType_sectionTitle ipsType_reset cForumTitle">Playby List</h2> <div class="ipsPad ipsBox"> {{$runit = \IPS\Db::i()->select('*', 'characters_fields_values', 'field_# != ""', 'field_# ASC');}} <ul class='ipsDataList ipsDataList_reducedSpacing playbyList ipsGrid ipsGrid_collapsePhone' data-ipsgrid data-ipsgrid-equalheights="row"> {{foreach $runit as $playbys}} {{$char = \IPS\characters\Character::load( $playbys[character_id]);}} {{if $char->approved == 1}} <li class="ipsPhotoPanel ipsPhotoPanel_small ipsAreaBackground_reset ipsClearfix ipsGrid_span4 ipsPad"> <span class="ipsUserPhoto ipsUserPhoto_small ipsPos_top"> {{if $char->photo}} <img src="{file="$char->photo"}" alt="$char->name" /> {{else}} <img src='{resource="default_photo.png" app="core" location="global"}' alt="$char->name"> {{endif}} </span> <div class=""> <strong>Playby:</strong> {$char->fields('playby')} <br /><strong>Character:</strong> {template="link" app="characters" location="front" group="character" params="$char"} <br /><strong>Played by:</strong> {$char->owner()->link()|raw} </div> </li> {{endif}} {{endforeach}} </ul> </div> </div> This code will give you a simple list with an image to the side, the playby, the character and the player that plays the character. It is in a grid view and you can edit as necessary but it's in alphabetical order by first name of the playby. To explain the code a little we first tell the code to find all characters that have a playby filled in so the field is "not blank". Then we loop through those (where the foreach starts) to show them. To get the character name and player name we first load the character then check to be sure they are approved, because we only want approved characters showing in our lists, and then we output how we want everything to look. You're free to ask questions in the IPS Staff People Coterie or get assistance. Please feel free to leave a review below.
    4 points
  6. This is all CSS and HTML, so it should be fairly short. While this is two different effects, you can separate the two out and use them standalone. I make no promise about older browser support, but it should work in any modern browser engine. This guide should be relatively short, and it will not just hand you the coding, we're going to build it together, and I will explain transition effects and what doohickies do what and how. This is what we'll be making: The Base This has two effects to it that I'll be teach you how to do, the first is the letter-spacing magic, and the second is the little corners that move, but first thing's first, we need a good base for what we're going to do. So, first, we're going to create a container div. Create just a div with a class, you can call the class whatever you like, mine is header_box. <div class="header_box"> </div> You can style this any way you like. Mine is 607px wide, 133px in height, has some positioning. I made the font color on it #BD93D2, and it's got an rgba background (45,45,45,0.8). It's also position: absolute, you will need to set it to position: relative, if you don't have need of it being absolute, because we're going to use position transitions to make the sci-fi corner things, and the interior divs for the letter-spacing effects will be position: absolute in order to align them over each other. Remember that when you use position: absolute, it will contain itself automatically within the confines of whatever parent element it is nested under that happens to have a positioning defined for it first, that is not position: static (static is default), initial, or inherit. So, when adjusting the top and bottom values for a position: absolute element, it will use that parent element as its base, and the top left corner of that element will be top: 0 and left: 0, and bottom and right sides will be bottom: 0 and right: 0. The container that you want to define as its confines needs to be position: absolute, position: relative, position: sticky, or position: fixed. If you don't create this container, it will default to using body as its confines, meaning the positioning will be relative to the size of the body, and due to variant screen sizes, this is a nightmare, don't work with that. And this is if you're lucky, and there's not another element above it in nest order that has a different positioning, that does some unexpected wonkiness. Letter-Spacing Banner This is actually a bit tricky, because unless I give you the exact coding I used on mine, you'll have to play with some parts of the CSS until it looks and positions right, so don't be afraid to fiddle with it if it doesn't look quite right. Now, inside the header_box div, I have two other divs, these are classes header_box_inner, and header_box_title. <div class="header_box"> <div class="header_box_inner"> </div> <div class="header_box_title"> </div> </div> You can use whatever class names you want, of course. The first element that shows by default is going to be _inner, so whatever you want to show first, that's what you'll type in the _inner div. Mine has a line-break in the middle (br), so it comes out to two lines, and the positioning and padding on it needs to be specific to get the alignment right. Yours may not use the same positioning or padding as mine. Again, you'll need to fiddle with it. Both _inner and _title are set to position: absolute; and top and left are at 0, by the way, just to make sure they overlap one another. For _title, this is the second part that shows, and I have mine having of the board name in it, that comes together. Now, once we have our div contents in, we're going to work on the CSS, let's start with _inner. _inner has text-alignment set to centre itself, it's also put on position: relative. I did padding-top until the text put itself where I wanted it. Normally, I'd advocate for using line-height for that, but because I have two lines in it, that won't work, so I used padding-top. Now we do the transition CSS: transition: letter-spacing 1s ease-in-out,opacity 1s ease-in-out; -webkit-transition: letter-spacing 1s ease-in-out,opacity 1s ease-in-out; -moz-transition: letter-spacing 1s ease-in-out,opacity 1s ease-in-out; -o-transition: letter-spacing 1s ease-in-out,opacity 1s ease-in-out; Transition CSS goes, in order: type of transition (you can do um, height, width, opacity, background, color, I will warn you, it does not work on display, so don't try that, save yourself the time; most likely, you can do what you want to do with an opacity transition, if you set it to position: absolute as well, it will stop taking up the space on the page and it works pretty much like a display transition, just, not), the amount of time the animation should take (can be in either ms or s, 500ms is about a half second, or 0.5s, easy way to go between milliseconds and seconds is, take the decimal back two places to get ms, 0.5 => 500, 0.3 => 300, 0.8 => 800), and then the kind of transition to use (ease, linear, ease-in, ease-out, or ease-in-out, we use ease-in-out here, this makes it a smoother transition both ways). What's the difference in transition types? Linear is the only one that does not use easing, formally called a timing function. Easing essentially slows part of the transition. Ease-in, for instance, starts the animation slowly, and finishes at full speed. Ease-out starts the animation at full speed, then finishes slowly. Ease-in-out starts slowly, is fastest at the middle of the animation, and then finishes slowly, too. Ease is basically ease-in-out, except it starts slightly quicker than it ends. So which one you actually want really depends on the specific animation effect you want. I'd definitely recommend playing with them a bit, to see which one you like best, but in general, for short animations like this one, you're not going to notice much of a difference. Quick Thing: If you're only transitioning one CSS element, such as height, don't use "all," use "height." This prevents the transition animation from animating too much for what you want to do. As you can see with the CSS for the transitions above, you can define multiple transition types and speeds and timing functions for transitions by separating them by a comma; if you're transitioning only a few elements, for sure, use specific transition declarations, the first part is called the property, this defines the CSS property you want to transition, instead of falling into the rut of using "all." Why? If anything changes between one and the other, it will animate, when it's set to property "all." This can cause the CSS to be rendering too many animations for what you want to do, and can impact browser performance, and suck up more of your user-base's CPU than you want (yes, that is a thing, it does happen). Next, we'll set up _title. This one has the same transition coding, exact same, to make sure both transition when they should. We've also got text-align: center here, font styling, positioning, and this one is set to opacity: 0. We also, obviously, have letter-spacing. Mine is set to 38px, and I do remember fussing with it a bit when I first coded this about a year or so ago, in order to make it so that the letter-spacing would cause this div to take up the entire width of the header_box, before disappearing, and not spill over. It's up to you if you want it to take up the entire width (and it will also vary for yours how much spacing it can handle before it spills over and or disappears before the letters are done expanding apart), so you will have to futz with it a bit until it looks how you want. Now we add the hover triggers: .header_box:hover > .header_box_inner .header_box:hover > .header_box_title The > between :hover and the next class tells the hover transition to only work on the element within the header_box that is being hovered on, so think of it kind of like a selector, of a form, that tells the CSS which element of that class to alter. Hey, don't look at me like that, maybe some people don't know how hovers work. Anyway, now we add some more CSS, and repeat our transitions from the main classing up there. _inner's hover has letter-spacing 12px, and opacity 0. That's it. _title's has letter-spacing 0, and opacity 1. So, we've gotten this far, and you're probably bouncing all excitedly; but there's a problem. _inner starts coming back in before _title is done easing out, and _title starts animating before _inner is out of the way. That's not terribly smooth, is it? We've forgotten a piece of CSS: transition-delay. I have mine set to transition-delay: 1s. Why? Because these animations will take 1s to complete, I want to make sure the delay is long enough to let one animation finish before starting the next. Now we place this transition delay on _inner, and then on _title's hover. This causes the hover animation (what happens when you mouse over) to wait until _inner's transition is done before starting its own, and _inner's transition back into non-hover state to wait until _title's is done. This makes it much smoother an animation, things don't just randomly appear in a place that doesn't make sense for them to be yet. Now, the specific letter-spacing settings will vary, most likely, depending on the final width of your text, and how far you want it to spread out before coming back together, but remember, _inner needs to start at 0 and then the hover CSS for it will have a higher number, whereas _title will start at the high number and transition to 0 in the hover CSS. And there you go, now it mooviedoovies. That's it for this part! Sci-Fi Corner Effect In the gif above, you'll see these little purple corners that move back and forth in the box. These can be made to start in the absolute corners and move inward, or start inward a few pixels and move to the absolute corners, either way. The concept is the same, so I'm only going over the particulars of how to set this up once. Now, before the header_box_inner div in the header_box, I added four more divs: header_box_topleft, header_box_bottomleft, header_box_topright, and header_box_bottomright. <div class="header_box"> <div class="header_box_topleft"></div> <div class="header_box_bottomleft"></div> <div class="header_box_topright"></div> <div class="header_box_bottomright"></div> <div class="header_box_inner"> </div> <div class="header_box_title"> </div> </div> The first thing we do to these is, we set their position to absolute. Then we make width and height both 10px. Now we do a border: solid. The border width is dependent on which box this is; for instance, _topleft is 1px 0 0 1px (top and left). _bottomleft is 0 0 1px 1px (bottom and left). When doing border width in a single, shorthand CSS line (border-width: numbers here), the directions go: top, right, bottom, left. Whatever the box is named is which sides you want the 1px border on. The colour attribution of header_box will colour these boxes' borders, so mine does not have border-color styling, you can add that if you want. Now we add our transition lines. These will be using different properties based on which div they are, again. So, _topleft is using properties top and left, _bottomleft is using bottom and left, and so on. Whatever border width properties you defined in the CSS for the box, those two are the transition properties you'll be using. Set them up the same way as you did the transitions for _inner and _title above, it's a little more complicated, because we want different properties defined in each box depending on which it is, but only a little. The majority of our CSS in this is in the standard classes, because we need to define the bordering and width and height and whatnot. For positioning, this also depends on which box it is. Ergo, we want _topleft to be left: 10px and top: 10px. _bottomright needs to be bottom: 10px and right: 10px... just like the CSS transitioning is set up for this. You can reverse this, so that these are all at 0, and then transition into 10px, if you want them to pull in, instead of push out, on hover. Like we did above, we'll had the hover CSS codes: .header_box:hover > .header_box_topleft .header_box:hover > .header_box_bottomleft .header_box:hover > .header_box_topright .header_box:hover > .header_box_bottomright In these, we set all the positioning on them to 0 (or 10px), and then copy over our transition CSS. Ta da! Mooviedoovie corner thingers! Closing Phew. Hopefully this made sense. Now, I will disclaimer here: you do not want to overuse these effects. When a CSS transition runs, the browser pulls more CPU to render the animation, so the more thingabobs moving around on your site, the more CPU your site is going to eat. On hover, it's not as bad, but the moving thingers can be really overwhelming and just look like you're trying way too hard, so, use them sparingly. The corner effect generally is less overwhelming than the letter-spacing one, so you could use it in more places before it's too much, but just remember: sometimes, less is more, and yes, it is possible to have too much of a good thing. Hopefully this was interesting, if nothing else, and I hope I managed to give a decent introduction to CSS transitions and how to use them. Remember, you can CSS transition a lot of different CSS properties. One note, most likely, if you're futzing with height, you'll want to use min- or max-height, I cannot remember why, but the height transition animation does not render right, it may have been fixed by now. Display property also does not transition, so you'll need to use opacity transitions and switch between position: absolute and position: static or relative to achieve the proper effect. Enjoy!
    4 points
  7. WHO POSTED TODAY? a block for IPS forums, by Mousie Why "who posted"? You might opt to use a "who posted" block over "who was online" for one of two main reasons: You use a Linked Accounts mod that does not record users as being online even if they have posted. You want your guests to see not just who visited the site, but who actively participated. What qualifies as a "post"? This block makes use of the "member_last_post" column attached to the member row. This generates a new date stamp any time the user posts content on the forum. This includes: New posts New topics New status updates New replies to status updates New blogs New comments to blogs New database records New comments to database records So in effect, any contribution the member makes to the forum is counted as Activity. How do I install this block? You'll find the full code at the end of this post. In your ACP: Go to Pages --> Blocks Create New Block Select "type" as "Custom" Select "content editor" as "Manual PHP" Under "Details", give your block a name, description, and a template key. Under "Content", copy and paste the code at the end of this post. How do I display this block? This block is mainly designed to sit at the bottom of your forum, similar to how Who Was Online? does. You can display the block by: Opening the Page Builder menu using the > icon on the left side of your screen, and selecting the block to drag and drop where you would like it displayed. If you defined a template key, you can add the block by editing the page template and placing the "{block="my_block_key"}" in your HTML templates where you would like the block to display. If you can use Page Builder to get the block where you want it, that is usually the simplest method. How does it work? This block doesn't use data from any custom databases, so it should work for most IPS forums. You should be able to copy and paste it into a new block, place it on your forum, and it will work. However, when I began coding blocks I found it difficult to find examples of simple blocks that I could understand, and use to modify and build my own blocks. For that reason, I've broken down the code below to explain what each function does, and how it manipulates the data to get the desired result. 1. Establishing the time difference $rightnow = time(); $timevar = $rightnow - 86400; In the first line, we use the time() function to generate a unix timestamp - a number that is essentially a count of how many seconds have passed since 1/1/1970. As the function is undefined (there is no additional information between the parenthesis), it defaults to current time. It also says that whenever we use the variable $rightnow, that it is to use the datestamp created by the time function in that first line. In the second line, we instruct the system to subtract 86400 seconds from $rightnow, and call that number $timevar. Basically, we're asking the system to work out what the time is now, and take 24 hours off it. You can adjust that "86400" to whatever number you like, depending on what range you would like displayed on your block. Want posts from the past week? Subtract 604800 instead. 2. Accessing the member database // Get the select object $select = (\IPS\Db::i()->select('member_id, prefix, suffix, g_id, name, members_seo_name, member_group_id, member_last_post', 'core_members' )); Here we define a new variable, $select, that we will use to contain information from the member database. The important parts here are:\ $select - This is the variable that will store all of the information found by the select query below. (\IPS\Db::i() - This function, unique to IPS systems, tells the system that we're going to access information from the database. It's a nifty shortcut. ->select - This tells the system that we're going to choose some information from a particular database and store it in the $select variable we defined at the start of the line. In the parenthesis, we have the conditions of the select. The format is: ('{columns to select}', '{database}') There are other conditions that you can add to manipulate and refine your data, but this simple example only defines the columns and database. You can also use * as a wildcard to select all information from a particular database, eg select('*', 'core_members') will return all columns of information from the core_members table. 3. Join on group data $select = $select->join( 'core_groups', 'core_members.member_group_id=core_groups.g_id', 'LEFT'); This line is important if you want to style the output using the group colours you've defined in your system. Which you probably do, because it looks nifty. How this works, is it looks at both the core_members table, and the core_groups table (where all information about the groups is stored, including styling) and asks it to find where the member_group_id (from core_members) is the same as g_id (from core_groups). Then, in any row in core_members where those fields are the same, it adds columns to the row and populates them with the relevant data from core_groups. Sounds complicated, but you can see how it works in a plain SQL example. Important parts of this function are: $select - This is the same variable we used above. $select-->join - This says that we're going to take the data from the $select variable we created, and join more data on. Basically, we're updating the information contained in $select, and still calling that updated variable $select. In the parenthesis, again we have a set of conditions that will tell the system what data to find and how to join it. The format is ('{second_database}', '{first_database_column}={second_database_column}') 4. Begin the print print "<div class='ipsWidget ipsWidget_horizontal ipsBox'><h3 class='ipsType_reset ipsWidget_title'>Who Posted Today</h3><div style='padding: 10px;'>"; Here we start to build the HTML that will contain the information. The function "print" is an output function, it tells the system that what comes next is a visual output element. In PHP, you can use HTML code by encasing it in double quotation marks, as in the example above. To print the results of PHP variables, they must be placed outside of the quotation marks. You'll see more of that below. 5. Start analysing the data foreach( $select as $students ) { if ($students['member_last_post'] > $timevar) Here, we ask the system to look through each row in $select and compare it to a particular condition. foreach - This tells the system that we're not looking at $select as a whole, but each individual row contained within it ($select is essentially a table in itself, created by the data you have chosen). $select as $students - This tells the system that each $select row is now going to be called $students, allowing it to differentiate between $select the big group of data, and $students the row of data contained within. if - This tells the system that we're only going to proceed for rows that meet the conditions defined in the parenthesis. ($students['member_last_post'] > $timevar) - This is our condition. What it says is that any $students row where the column member_last_post (you'll remember this is the column that keeps the latest post datestamp) contains a higher value than $timevar (the variable defined at the beginning of the block) are going to be used in the next processes. $students rows that do not have a datestamp higher than $timevar (thus, did not post in the last 24 hours) will be skipped over. 6. Create a running count { $count = $count + 1; We also want to know how many people have posted today, so this keeps track. Every time a record is found that meets the condition, $count (which initially starts at 0) goes up by +1. This works because it is located inside the foreach, and after the if -- which means that it runs every time a record is found that meets the conditions of the if. 7. Print the member list print "<a href='/profile/" . $students['member_id'] . "-" . $students['members_seo_name'] . "'>" . $students['prefix'] . $students['name'] . $students['suffix'] . "</a>, "; }} Again we're using the print function, this time to create a linked and styled list. It looks a touch confusing, and may help if formatted like this. print "<a href='/profile/" . $students['member_id'] . "-" . $students['members_seo_name'] . "'>" . $students['prefix'] . $students['name'] . $students['suffix'] . "</a>, "; }} Here you can see more clearly where HTML is enclosed in quotation marks, and where PHP variables are being used. PHP variables are being used to help create the link itself, by accessing the member_id and members_seo_name columns. You can see again how the column name is defined after $students to get the right piece of data, eg $students['name'] returns the name of the account, while $students['member_id'] returns the member's id number. You can also see how the PHP variables are used when HTML is also being used. If you just want to print the contents of a variable, normally you would use print $variable; But because we want to mix PHP and HTML output, we need to do things a little differently. Any PHP variable that is used between or after a HTML sequence needs to have leading and following full stops. For instance: print "some html" . $variable . "some more html"; 8. Print the count and close off print "<br><span class='resultxc'>" . $count . " members posted today</span><br>"; print "</div></div>"; This simply prints the $count variable (the number of total people that posted in the last 24 hours), and closes off the rest of the HTML used throughout the block. Who Posted Today -- Block Code /** * Build SELECT statement * * @param array|string $columns The columns (as an array) to select or an expression * @param array|string $table The table to select from. Either (string) table_name or (array) ( name, alias ) or \IPS\Db\Select object * @param array|string|NULL $where WHERE clause - see \IPS\Db::compileWhereClause() for details * @param string|NULL $order ORDER BY clause * @param array|int $limit Rows to fetch or array( offset, limit ) * @param string|NULL|array $group Column(s) to GROUP BY * @param array|string|NULL $having HAVING clause (same format as WHERE clause) * @param int $flags Bitwise flags * @li \IPS\Db::SELECT_DISTINCT Will use SELECT DISTINCT * @li \IPS\Db::SELECT_SQL_CALC_FOUND_ROWS Will add SQL_CALC_FOUND_ROWS * @li \IPS\Db::SELECT_MULTIDIMENSIONAL_JOINS Will return the result as a multidimensional array, with each joined table separately * @li \IPS\Db::SELECT_FROM_WRITE_SERVER Will send the query to the write server (if read/write separation is enabled) * @return \IPS\Db\Select * */ $rightnow = time(); $timevar = $rightnow - 86400; // Get the select object $select = (\IPS\Db::i()->select('member_id, prefix, suffix, g_id, name, members_seo_name, member_group_id, member_last_post', 'core_members' )); $select = $select->join( 'core_groups', 'core_members.member_group_id=core_groups.g_id', 'LEFT'); print "<div class='ipsWidget ipsWidget_horizontal ipsBox'><h3 class='ipsType_reset ipsWidget_title'>Who Posted Today</h3><div style='padding: 10px;'>"; foreach( $select as $students ) { if ($students['member_last_post'] > $timevar) { $count = $count + 1; print "<a href='/profile/" . $students['member_id'] . "-" . $students['members_seo_name'] . "'>" . $students['prefix'] . $students['name'] . $students['suffix'] . "</a>, "; }} print "<br><span class='resultxc'>" . $count . " members posted today</span><br>"; print "</div></div>";
    4 points
  8. Before we get started, this is what we're going to create: You can add as many articles as you like without needing to alter the script. Create Your Articles Go to webpage maker (under skins & templates) Click create new webpage Give it a page title, doesn't matter what, we're not going to see it. Give it a key, something memorable for you because you'll need it later. Set allow key to use board wrappers to No. Your contents need to include valid HTML, so wrap your paragraphs into paragraphs <p>I'm a paragraph!</p> and wrap the entire contents into a div with the class articles and it must have a unique ID. For IDs, I just use article_1 (number increasing for each new article) but you might prefer something more memorable. You will need to remember what it is. <div id="article_1" class='articles'> <p>Yay! First paragraph!</p> <p>I'm a middle paragraph</p> <p>I'm another paragraph!</p> </div> Rinse and repeat until you have the articles you want. Or just make two for the purposes of this tutorial. Create the Container The container is what will house the articles, it will also include our magical menu. Back in webpage maker (under skins & templates) Click Create a New Webpage Give it a page title, this one matters because it will appear in your nav strip. (ie. My Community -> lore) Set allow key to use board wrappers to Yes. Paste in the following code: <div id="welcome_articles"> <h1>Lore</h1> Welcome to our lore. Here you can bla bla bla. Click the links on the left to read the relevant articles. </div> <div id="article_container"> <aside> <ul class="article_container_list"> <h3>Lore Index</h3> <li><a class="container_links" href="#" data-showdiv="article_1">Link 1</a></li> <li><a class="container_links" href="#" data-showdiv="article_2">Link 2</a></li> </ul> </aside> <div class="article_content"> <% article_1 %> <% article_2 %> </div> </div> <script> $(".container_links").click(function(){ $(".articles:visible").hide(); $("#"+$(this).attr("data-showdiv")).show(); }); $('.container_links').click( function(){ if ( $(this).hasClass('active') ) { $(this).removeClass('active'); } else { $('.container_links.active').removeClass('active'); $(this).addClass('active'); } }); // following is purely to prevent page jump when user clicks on link $('a.container_links').click(function(e){ e.preventDefault(); }); </script> where <% article_1 %> and <% article_2 %> are the keys to the articles you created earlier. The javascript is already included and assuming that you don't replace your class names, it doesn't need to be altered. Besides the aforementioned keys, the most important part of the code for you is <li><a class="container_links" href="#" data-showdiv="article_1">Link 1</a></li> the data-showdiv attribute needs to be the same as one of the articles you created earlier. So, say you created an article about species and you gave it an id of species. Your link should look like this <li><a class="container_links" href="#" data-showdiv="species">Species</a></li> Once you have added the links and keys, save it. If you visit it now, you'll see that everything is displayed but clicking the link will make everything vanish except the for corresponding article. You'll also notice that the list sits on top of everything else. Time to hit the style sheets! Stylesheet Go to your stylesheets and paste in the following #welcome_articles { margin-bottom: 10px; padding: 5px; border-bottom: 1px solid rgba(0,0,0, .1); } #article_container { display: flex } #article_container .article_content { flex-grow: 2; padding: 0 20px 20px; border-left: 1px solid rgba(0,0,0, .1) } #article_container aside { padding: 10px; min-width: 15% } #article_container .articles { display: none } ul.article_container_list { list-style-type: none; margin: 0; padding: 0 } ul.article_container_list li { display: block; margin: 1px; } a.container_links { display: block; border-bottom: 1px solid rgba(0,0,0, .1); padding: 5px } a.container_links.active { padding-left: 15px } ul.article_container_list h3 { margin-top: 0 } The most important bits are #article_container { display: flex } this makes the aside and div.article_content sit next to each other. Sometimes however, the aside can look a little bit claustrophobic, so I add #article_container aside { padding: 10px; min-width: 15% } To ensure that the div.article_content grows to fill the entire space left over, I add #article_container .article_content { flex-grow: 2 } To hide all of the articles by default, I add #article_container .articles { display: none } if you are having problems with the script after adding this code, move #article_container .articles { display: none } to your guidebook page so that it sits above the scripts: ie <style> #article_container .articles { display: none } </style> <script> $(".container_links").click(function(){ $(".articles:visible").hide(); $("#"+$(this).attr("data-showdiv")).show(); }); $('.container_links').click( function(){ if ( $(this).hasClass('active') ) { $(this).removeClass('active'); } else { $('.container_links.active').removeClass('active'); $(this).addClass('active'); } }); // following is purely to prevent page jump when user clicks on link $('a.container_links').click(function(e){ e.preventDefault(); }); </script> Finally, it is useful if the displayed article's link is different from the others. To do this I add a.container_links.active { padding-left: 15px } Responsiveness Make sure your head (in the global wrappers) includes the following <meta name="viewport" content="width=device-width, initial-scale=1"> This will ensure the zoom is at 100%. If you have any fixed width elements in your header or footer you may find that that user now needs to scroll horizontally. I recommend fixing that so that those elements no longer include a fixed width. I've addressed the default fixed widths in the following code @media screen and (max-width: 979px) { body { font-size: 1rem } #wrapper { width: calc(100% - 20px); margin: 0 auto; } #article_container { display: block; } ul.article_container_list { text-align: center } #userlinks { width: 90% } ul.article_container_list li { margin-bottom: 10px } ul.article_container_list li:last-child { margin-bottom: 0 } } The important part (applicable to the guidebook) is as follows #article_container { display: block; } now the aside sits above the content. ul.article_container_list { text-align: center } we center the links (note that they automatically expand to fill the available space because we made the links into blocks earlier.) ul.article_container_list li { margin-bottom: 10px } we make the links easier to tap for a chunky finger. ul.article_container_list li:last-child { margin-bottom: 0 } but the last list item doesn't need a bottom margin, so we get rid of it. The end result for mobiles becomes this: Just want some copy and paste? <head> <meta name="viewport" content="width=device-width, initial-scale=1"> </head> <div id="welcome_articles"><h1>Lore</h1> Welcome to our lore. Here you can bla bla bla. Click the links on the left to read the relevant articles. </div> <div id="article_container"> <aside> <ul class="article_container_list"> <h3>Lore Index</h3> <li><a class="container_links" href="#" data-showdiv="article_1">Link 1</a></li> <li><a class="container_links" href="#" data-showdiv="article_2">Link 2</a></li> </ul> </aside> <div class="article_content"> <% article_1 %> <% article_2 %> </div> </div> <style> #welcome_articles { margin-bottom: 10px; padding: 5px; border-bottom: 1px solid rgba(0,0,0, .1); } #article_container { display: flex } #article_container .article_content { flex-grow: 2; padding: 0 20px 20px; border-left: 1px solid rgba(0,0,0, .1) } #article_container aside { padding: 10px; min-width: 15% } #article_container .articles { display: none } ul.article_container_list { list-style-type: none; margin: 0; padding: 0 } ul.article_container_list li { display: block; margin: 1px; } a.container_links { display: block; border-bottom: 1px solid rgba(0,0,0, .1); padding: 5px } a.container_links.active { padding-left: 15px } ul.article_container_list h3 { margin-top: 0 } @media screen and (max-width: 979px) { body { font-size: 1rem } #wrapper { width: calc(100% - 20px); margin: 0 auto; } #article_container { display: block; } ul.article_container_list { text-align: center } #userlinks { width: 90% } ul.article_container_list li { margin-bottom: 10px } ul.article_container_list li:last-child { margin-bottom: 0 } } </style> <script> $(".container_links").click(function(){ $(".articles:visible").hide(); $("#"+$(this).attr("data-showdiv")).show(); }); $('.container_links').click( function(){ if ( $(this).hasClass('active') ) { $(this).removeClass('active'); } else { $('.container_links.active').removeClass('active'); $(this).addClass('active'); } }); // following is purely to prevent page jump when user clicks on link $('a.container_links').click(function(e){ e.preventDefault(); }); </script> I hope that someone finds this useful! As already noted, any forum software can utilise this guide, the actual magic is the script and that is not software specific.
    3 points
  9. Hello, my name is Arceus, and I have social anxiety. I know it probably seems like I've been a highly-visible part of the Initiative for a long time, but despite my being present on Distant Fantasies, and even being part of the brainstorming control group that eventually helped birth the Initiative, I haven't really been a big part of this community for as long as it seems. Large communities terrify me, and DF and the Initiative were no exception. This is a really common thing among role-players; the internet is a still-scary-but-much-less-so-than-reality medium to interact with others. If something goes wrong, we can run away and not have to worry about it anymore. A lot of people with anxiety in general role-play, because of the easy escape routes, the anonymity, the lack of face-to-face interaction compounding a sense of duty and commitment, but getting into established games and resource communities can be a really difficult feat. This guide aims to help those that have social anxiety, or are just really shy, find a way that works for them to get into the fun and start making connections with others. No single method works for everyone, so you may need to try a few different things and see what works for you, but that's okay. Take your time. Someday, you'll know what works, and be able to implement it with every new community you join. This guide also touches on some tips for admins that have a really shy, or anxious, member on their hands. The Social Shield Admittedly, this does require you to have a more outgoing, less nerve-y-frazzle-y friend, but if you do, and they are really your friend, they'll be perfectly happy to be the Social Shield for you. What's this role constitute? Essentially, they are the "front-end" of a two-man operation. They engage the community, get a feel for it where you're too frazzled to, and you essentially watch on the sidelines and observe how the community responds to your Shield. Oftentimes, they're also moral support; helping you work up the courage to post things, and telling you it's okay and nobody'll bite you. I have a Social Shield. I have two, actually, one's a Japanese-Chinese dude with a nonexistent BS tolerance, and the other's a Russian with a thick accent and all the in-yo-face. They are very good at making me feel like I'm safe when they're there. They've got my back, and I know it. I explain this because this is a good bit of choosing a Social Shield. You want someone that is not afraid to make noise when something's wrong, someone with a decent BS detector, and someone that really cares about you, and has your best interests in mind. I'm not, never, saying they need to be around solely for you; be sure both you and your shield are aware that you're still different beings, and understand your shield's under no obligation to do anything they don't want to, and it's not always a personal slight. Be careful not to become too dependent on them. You are still a separate person, and your relationships and interactions with others will not, cannot, and don't need to be, exactly the same as those of your shield. My shield 1 and shield 2 are dating each other, and they make friends and hit it off with people I don't. Even though we tend to follow one another place to place, we don't cling incessantly to one another, and render one another incapable of operating without the other two, if that makes sense. Because they are there, though, you can sort of use them as a soundboard, too. If you think something's going terribly, or your mind's doing anxiety-circles in your head and making you think everyone hates you, you can go to your shield and ask them what they think. My shields are like "Lol, Arc, hush bby, it's okay," most of the time, but once in a while, my instincts are not skewed by anxiety, and it's good to have someone that isn't as anxious as you are, or anxious at all, to be able to say, hey, no, that's wild, good call. My Member Has a Social Shield Good for them! Good Shields can be kind of difficult to come by. Unfortunately, I realise this is often red-flag behaviour for administrators, and members, that have seen duos or trios come onto a site, and essentially turn it into a drama-fest by pitting everyone against everyone else. This is a reality. Yes, you'll probably be a bit unsure of what to do in situations like this if you're one of those that has been burned by friends, family, or romantic-units that role-play together. All I can say is, this trio is not that trio. One person is not another. Try not to judge prematurely; trust me, if you've got an anxious individual and their Social Shield(s), they will notice, and you will lose them. End of story. Let them play on their own if that's what they decide to do. Sometimes, the anxious one is going to want to play in the setting with their Shield(s) first, to dip their toes into the community slowly. But really, if they never do branch out, what's that actually hurt you? If they're not holding anyone else up, getting in the way of others having fun, and aren't causing problems, just let it go. It doesn't matter as much as you may think. If the group don't want to play with others, they'll make that pretty clear. Ergo, they won't. So if they reach out to you, either you the admin, or you the member unrelated to them, encourage that behaviour, by responding well. Try not to clip their wings before they've fully spread them, you know? Prejudicial viewpoints and attitudes, as I mentioned above, will be noticed, and if there's too much going on that's making the anxiety worse, they're going to just leave. Now, it's entirely up to you if you want these kinds of players gone, but to be honest, when an anxious person is comfortable, they can be very great additions to a site. You may really be losing out. The Help Me Corner Friends like the shield, in general, are helpful, and places like the Initiative where you can post up experiences and ask for advice (and we do have an anonymous posting feature, so you can hide identifying info if it makes you feel safer!), are invaluable. The more you pull from friends and advice-givers, the more you're able to look at something similar later and go, "Yeah, okay, I know what to do." This builds confidence, and the key to overcoming anxiety in general is confidence and knowing what to do. Logically extrapolating from past experiences is really only helpful if you knew what to do then, anyway. By leaning on friends and decent communities to help handle situations as they come, you're teaching your brain that it does know what to do, and when things like it happen again later, it's not drowning in a puddle of OH MY GOD WHAT THE- Don't be afraid to turn to trusted friends and communities when you feel like something's off. It may very well be; for every community that's decent and not toxic, there's another that is, and chances are, you will run into a few that aren't good for you before you find one that's cosy. It's okay. It doesn't say anything about you, only about those communities. Further, there may not even be anything that's really off about it; it may just be your anxiety telling you there is, and having someone else more grounded say, "Hey, I think you're overreacting, take a breather," helps ground your mind and centre your thoughts, so you can figure out when there's something actually bothering you about it, even if it isn't as toxic as you thought. Maybe that community just isn't really what you're looking for, but freaking out and having a panic isn't going to help. You need to be able to have someone give you an objective viewpoint, so you can determine if that community isn't for you, or if it's just your anxiety being… well, anxiety. Again, it is okay to ask for help and advice. Wise men didn't become wise because they ran through life blindly. They learned from other men that had learned before them. It's alright if you're unsure. Don't ever let anyone tell you otherwise. As someone I know once said, "There is strength in standing alone, but there is more in recognising when you can't." The Easy Does It This is the hardest, and the simplest. In short, if you're interested in a site, register, maybe say hello in the chatbox if you're feeling brave that day, and see what happens. Some have trouble saying hello in real-time chats, like Discord or cbox; that's okay. For those, the best bet will be finding a site that has a decent culture of open threads being answered, or plot threads being used (and actually leading to some posting eventually). You can post one open, or a plotter, and just kind of ride the wave. If you take it slow, it won't be an overwhelming tsunami. Get that one in-character thread going. Maybe post in others' plotters. If you're the type that prefers to PM (some with anxiety hate those, others prefer them, whatever's your jam), read through some character profiles, find someone you like, and PM their player to see if they'd be up for a thread. You don't have to dive into a site, guns blazing and ready to go. It is okay to take your time and handle things at your own pace. If a community, or its staff, make you feel like taking your time isn't good enough, then that's not the site for you, and that's okay too. Start Small The best advice I can give for anxious or shy players is not to try something too big at first. While you're still getting your bearings on what way works best for you, it's better if you choose a site that has maybe five or six players on it. The constant activity on a very large, or very active site, is more likely to freak you out before you've even started posting. Breathe deep, pick a smaller site, and ease your way into it. The absolute best thing that has ever worked for me, is being with a site since its baby stages, from the day it becomes public. In this way, I can get a feel for the small number (usually two or three, if that) of players that are there already, and with only a few of them it's not as scary. Then, as new members join, I can get familiar with them as they come in, instead of diving into an established community with planning and plotting already done before I showed up, which I then have to navigate amid anxious-freaking-out to figure out where my character(s) and I can fit in. It's okay if you can't manage the big guns. Maybe someday, you'll be able to. You'll probably find a lot of the baby boards die off in a few months, and yes, that's frustrating, but giving yourself a near constant panic attack trying to join some crazy huge, old site, is also not going to work in your favour, either. Start small. Work your way up. If you never can make it past a certain size, that's okay, too. Take care of you, because if you reach a point where just getting on the site makes your heart leap into your throat and your breathing speed up, and all you can hear is the rush of blood in your ears, you're hurting yourself just to be there, and that is not what this hobby is about. Yes, folks, it's a hobby. Please don't take it so seriously. You should not be freaking yourself out all the time and making yourself uncomfortable for it. I've Hit That Stage. Do I Flee Now? No. Well, maybe. First, I'd highly recommend taking the situation to a trusted friend, or somewhere like the Initiative where you can explain what's going on (as best you can, I know it can be hard), and figure out why. If you can handle doing so, try to focus. Think. Why does your heart jump like that? What are you afraid of? Is it something you can bring to the staff, to talk out? Is it as simple as you're in too many threads, or have too many characters to juggle? Sometimes, we can get excited, especially because it's so hard for us to find a site that works for us, and we can dive in too hard, too fast. It's okay to take a step back. Drop a few characters or threads, take a bit of a step back, and slow down a little. See if that helps. If there's some Real Toxic Something going on, though, that you're picking up on, it's a good idea to bring these concerns either to the staff, if you feel safe enough to do that, or to a friend or community where you can get advice. Now, understand that ultimately, what you do is up to you. Even if there's a Real Toxic Thing going on, some may still tell you you're freaking out over nothing, especially if you're too frazzled to explain it properly. So it's okay if you disagree with them. If you find that you ask for advice, and something in you hates the response you get, well, there's your answer. You know what to do. And it's okay if you end up doing something different. Sometimes, we just need someone to advise us to do something we know, in our subconscious, isn't what we want, for us to figure out what we do want. My Member Doesn't Talk I'm going to say now: do not ever rush someone with social anxiety. Do not ever tell them to "just talk to people." It is a real thing, and it is very difficult to work around. Those of us struggling with it have had our very real fears and difficulties undermined and invalidated our entire lives, and we don't need it from you, too. I'm not implying you need to understand, it's okay if you don't, but don't pretend you know what's right for them and their situation. The same methods do not work for everyone, so it's hard to place a blanket descriptor of what to do when you have a new member that kind of sits there, even for others with anxiety (psh, shoot, maybe none of my methods will work, either). Sometimes they're just being lazy, too, making it even worse. My advice is, let them do them. When they are ready, they will reach out to you. If they never do, well, sometimes it goes that way. For some people, talking out of character is just not something they can do, or not something they can do right away, and that's fine. As long as they're posting and aren't holding anyone up for inexplicable reasons, it won't hurt. Sure, your site may not be as active in chat as it is on the board, but it's much preferable to the alternative way that can go sour (all chat and no post). You'll get chatty members eventually, just be patient, and don't lash out and blame the players that aren't doing anything wrong. This Member Joined And All They Do Is Talk; Sometimes Overshares I'm sure someone will run into someone like this eventually. This can be a symptom of anxiety. When I'm stressed out, I will tend to overshare and vent incessantly. I try to be mindful of how often I do this, but when it feels like the whole world's crashing down on me, it can be difficult to keep it all to myself. I need to let it out, or I'll just go in circles. But I have friends that I can talk to. I have people in my life that will listen to this. Maybe this person you have on your hands isn't able to have an outlet like that; many anxious people have trouble in public, and making friends, and… you get the idea. It is possible that you are the only place/person they can talk to. That said, you are under no obligation to be so. You can do one of two things: either gently remind them that a role-play site is not a replacement for therapy, or, if you're willing to be their sounding-board, ask them to PM you, instead, and stop sharing personal information in public venues. Well, there's another thing you could do, you could send them a message with general, non-role-play communities that are aimed to being places where people can share things like that (Reddit has several communities that are dedicated to unloading one's thoughts, on a variety of subjects, you could do a quick Google to find one that fits them, or suggest that they do so). The thing is that many times, these people need friends or a therapist, sometimes both, and cannot find the former, nor afford the latter, and are drawn to the anonymity of the internet. Some of these people aren't even role-players. And that's okay, but it needs to be in an appropriate place, and your site's public discussion sections is not it. Try not to be rude to them, but if they still don't stop, don't be afraid to enforce your rules. Some may threaten you; don't listen to this. You are not obligated to help them. Give them appropriate resources (the suicide hotline for their country is pretty easy to find on Google, they can also chat with them online, if you believe they may be suicidal), and try to let it go. I know that can be much easier said than done, but this is not your problem, nor the outcome your fault. You cannot fix their lives. You can't. All you can do is point in the direction of the light at the end of the tunnel, and hope they walk toward it. Shy/Anxious Versus Lazy Unfortunately, there is no real way to tell the difference between these two, at least not easily. Generally speaking, though, those that are just shy or anxious will make some minor effort to get things going for themselves. So, in short, all I can say is, stick to your activity rules/expectations, and if they don't meet those, well, there we are. Even being shy or anxious should not be an excuse for not meeting activity requirements. If they can't handle posting, at the very least, without chatting, maybe they should find a new hobby. I say this even as someone that does have anxiety; I get it. But even I expect to be held to the same activity standards as everyone else. I want to be treated the same, even, and if I can't manage myself well enough to meet any requirements on a site I voluntarily joined, that is my fault. Final Word for Those Struggling With Anxiety You have anxiety. Don't let anxiety have you. You can do this. What's worked for you? Any other tricks and tips to share with others? Let us know!
    3 points
  10. Before we get started, I want to say, here, really quick, that this is a short overview, of what settings are what, where they are, the good things and bad things about SMF, so if you don't want to play with it yourself, you can follow along with me as I do it. I will talk about some of the pros and cons of running an SMF site, and touch briefly on semantic things that I will cover more thoroughly later in a more focused guide. Primarily, this guide will look at, besides pros and cons, the settings and adjusting things to your liking. If you're used to Jcink and similar, there is a tiny bit of a learning curve, and this guide aims to make that curve less steep. Some things to get out of the way: I've been working with SMF since 2005 or so, and I will tell you right now, development is the slowest it has ever been. Don't expect the core software to change much. Fortunately, SMF has a very strong modding community, and anything that someone needs that doesn't exist, I may be able to do. Because of this, no two SMF sites operate the exact same way, and adding new features and expanding functionality is really just a matter of either figuring out how, or finding someone else to do it. So, this, this is what SMF's greatest strength is. It is fully and entirely customisable, top to bottom, change anything in it you like. It is licensed as open-source software, which means you really are allowed to change anything, and make the software you want it to be, if you can. You can even change it all and then re-release it under another name (provided you don't pretend SMF endorses you). I've said it a thousand times and I'll keep saying it, SMF is rude. It does not like anyone. Half the time it doesn't even like me (being fair, it breaking all the time might be how it shows affection, too), so if you get overwhelmed and give up easily, or want instant results, SMF is not for you. If you're willing to stick with it, accept that you will absolutely break it a lot, ask for help, and put in some effort, it is very rewarding, and SMF can be customised and extended in ways a large number of the competition, so to say, cannot be. SMF can also teach you a lot, too, albeit not always the kindest way. Everything I know about coding, I learned because SMF broke in a way that made me learn it. Yeah, you can be me, too, someday, if you're bullheaded stubborn enough. P= Disclaimer: I know nothing about SMF 1. I have never installed it, and I don't intend to. My guess, though, is it's not too different from 2; major versions usually are, but generally follow the same logic. However, I will not support SMF 1. Uh. Because I can't, really. Note: If you're more familiar with old ProBoards, SMF will be more familiar to you, as well. ProBoards at one time ran on SMF's predecessor, YaBB, and the influence from it remained for quite some time. Now, let's get going, rambled enough up here haha. Installing This should be fairly straight-forward. You'll first need to either follow the prompts through Softaculous, if you have access to it through cPanel, or upload and extract the SMF installer files, and then create a blank database for it. Visit the URL you extracted to, and follow the on-screen prompts there. Remember to input the correct database information. When doing installations through Softaculous, if you want it on the root URL of your domain, you'll have to change its settings, because it will try to install at /smf. Sometimes, the manual installer will fail to create a file called Settings_bak.php. To create this yourself, just make a copy of Settings.php, and rename it to Settings_bak.php (this is a backup file of your settings, or will be, and SMF wants it there as a fail-safe -- spoiler, it's really not one, but alright, we'll pet the pretty). One thing: I highly recommend having your root user #1 username something different from what it will be displayed as. As no one but admins can find that username, it makes it all the harder for a brute-force bot to try and log in as root admin #1 and tank your forum. It also makes it harder for your pissy members to try it (don't laugh, the only time any of my boards have ever been hacked, it was a member that did it). The only draw-back is you'll have to remember the username, because that's what you log in with, but ticking stay logged in will fix this (it literally never logs you back out unless you switch devices or clear cookies). Initial Configuration Quick tip: if you like sidebars better than drop menus, there's a double arrow to one side above the menus in the ACP. Click this to turn all the drop-down menus in the system into sidebars with links. (Only applicable on SMF 2.0.) There are a bunch of check boxes, text inputs, and doo-dads in the SMF configuration panels, so we're going to take this relatively slow, and take them as it comes. We'll start up here in the general configuration, so pop into SMF's ACP, and then go into Configuration => Core Features. What's this? This page allows you to turn on, or off, varying different little doosnickities. These are features or functions that are not enabled by default, quite frankly I have no bleeding idea why they did it this way, it seems so unintuitive, but here we are (if it's any consolation for anyone, this page is gone in 2.1). Click the power symbol to the right side of a feature row to turn that thingbob on. Which ones you want to turn on are entirely up to you; if you have SubAccounts installed, by the way, it will appear here, so you'll have to come here and turn on the master switch. Personally, the calendar's not worth it. Advanced Profile Fields enables admins to add custom fields and turn off most of the default ones, so I'd recommend turning that on, even if you honestly have no need of it (it still has AIM and YIM in there, come on). Moderation, Administration, and User Logs keeps a running log of any moderation, admin, or user profile edit actions that happen. If you're paranoid, this is the master switch for you. Post Moderation works in conjunction with the Warning System; with both on, you can make it so a user on moderation due to warning accumulation must have their posts approved before they're made public. Post Moderation can be used by itself by setting up permissions and group or board controls appropriately. I wouldn't bother with paid subs, report generation, or search engine tracking, they're really not helpful for most RP forums. Now we're going into Configuration => Features and Options => General. From here on out, it's all selectors, check boxes, and input fields. Most of this is pretty straight-forward, so I won't be talking about any of them in great detail, but we will touch on a couple that can be confusing. For instance, search engine friendly URLs. What's this do? It turns ?topic=1.0 into /topic,1.0.html. Personally, it looks gross, but I suppose it might make search engines like them better. On the other hand, you can do a lot better on the SEO front than that, but hey, you do you. You can also set meta keywords for search engines, but these are less important than they used to be. Further, depending on the keywords you use, you can hurt your rankings, not boost them. Anyway, this is not a SEO guide. It's up to you if you use them, do some Google-fu and see if you feel it's important, but if you don't know what you're doing, I'd leave it blank. Below that, we've got the time format, offset, and time-zone. Offset and time-zone are pretty obvious, though there's really never a reason to use offset in the ACP, offset is more of a member-specific setting, to "fix" your default board time-zone to match theirs, if it is off by over an hour. By default, it runs off server time. So if your server's time is off by several minutes, your board will be, too, and if you have to set the server time back a few minutes, nothing changes on your board until time "catches up" with itself. Who's online will stop updating until it does, for instance. Anyway, you may need to do some scrolling to find your time-zone, I believe it's all Africa first, and then the default time format. For some reason, to users, this is a drop-down selector that makes sense, but in the ACP, it's raw srftime. Lord. Why. What's srftime? It's the little percent signs and letters that PHP uses to format time stamps. If you've never seen a time stamp before, it looks like this: 1533534916 That says, August 6, 2018, 12:55 AM CDT. No, it really does. If you're curious, random aside, but time stamps in this format (PHP's time()) are based on a specific date and time, and then count the seconds that have occurred since then, to calculate the current time. It counts from the Unix Epoch (January 1, 1970, 00:00:00 GMT), when the manner of unix systems measuring time changed so that instead of having to set 0 (the epoch) to representing a recent time, it became possible to represent time with a 32-bit integer, increasing the time-span that could be stored to around 136 years. (I have no idea what the heck you just said-ese: computer nerds made computers capable of handling more numbers and time calculation got easier). From that time, the epoch was rounded down to the nearest decade, ending up with 1-1-1970, probably because it was a bit tidier than 1-1-1971. Sometime around 2106, we'll have to push the epoch value up, but by then, we may have made computers capable of handling even more numbers, so who knows. Anyway, so PHP uses these seconds to figure out time and put it into a human-readable format. I won't get into the long of it here, but you can search for srftime on Google, and find a list of the keys that will produce the time format you want. If you want a really simple, short and sweet one, I've got: Aug 6, 2018, 12:55 AM %b %d, %Y, %I:%M %p Beyond this, we've got track daily stats, what this does is it tracks daily new topics, posts, members, and, if you want it, page views (the number of pages that have been loaded for end-users in a day). You can turn on tracking page views if you want, but there's really nothing terribly useful in it. Now, in the rest of features and options, it's pretty simple, with one note: under Layout, we've got Display time taken to create every page. I would not turn this on, but if you're curious what your SMF install's page loads actually look like in seconds, then there you go. In Signatures, it allows you to restrict how much one types into their signature, the maximum number of lines, max font size, enable or disable smileys in signatures and restrict how many there can be, max image count, and restrict signature image height and width. If you intend to use signatures, I'd definitely set these in accordance with your site's rules. You should never have a reason to touch server settings, unless you need it temporarily off-line, need to update emails, or change your forum's displayed title. Beyond the General section, it gets dangerous. Don't mess with it unless you know what you're doing, you can break your board and have no idea what you did. Beyond this, everything's pretty straight-forward, or has a more detailed section below, or in another guide that's planned. Installing Modifications This sounds scary, but, it's not, it's fairly cut and dry. You can search the official SMF mod site for a mod that you like, and download it directly from SMF's servers, or you can just upload a package file. These are .zip or .tar.gz files that have installation information in them. So how do modifications work? Modifications are package installations written in a combination of XML and PHP. The XML file tells the package parser what to do to the source files; ergo, find this, replace with this, or find that, add this above it. It's actually quite brilliant. The PHP files typically hold database alterations and additions in them, if there are any. More sophisticated package mods will typically have a read me, that displays at the top when doing a test installation (clicking 'install mod' will cause it to do a test parse of the package, to see if there are any errors, first, more on that in a second). Installing package mods is legitimately just a matter of clicking install, clicking install again, and letting it do its thing. Test installations are performed first. This is to warn the admin user about potential mess ups and board breakage beforehand, so one can prepare for it, and take necessary measures. The next SMF guide I write will be about installing mods that error. Yes, there is a way to do it even if the package installer's test run errors on all the file edits. So, click install and have fun. It's really not as terrible as it sounds. If you feel better doing so, and you might, consider installing a test board and then run all your package installs on that so if you hopelessly break it, no big deal. I will mention here, if you come across a blank white screen, and it gives 500 as the error, this is called an internal server error. There are many many reasons why you may see one of these, but if you've been messing around in the templates or installing or uninstalling things, you may see this (and probably will at some point). Breathe. Don't panic. If you have cPanel, somewhere in there is something called Error Logs; you'll want to poke into that and see if it's logging an error in there when the 500 pops up. What it says there will give you more expanded information on why it's doing a 500. [Wed Sep 05 10:54:58.140527 2018] [php7:error] [pid 10357] [client 192.168.1.1:51001] PHP Fatal error: Uncaught ArgumentCountError: Too few arguments to function acmGiantCharacterLoadTumble(), 0 passed in /var/www/html/smf21/Sources/Subs-Characters.php on line 664 and exactly 1 expected in /var/www/html/smf21/Sources/Subs-Characters.php:330 You'll be looking for something like this. (Yes, this caused a 500.) This is a much better idea of what happened, where it is, and how to fix it, and honestly you might be able to figure it out yourself (but don't worry, the Initiative is full of tech masters if you can't). I highly recommend, at least early on, when you are editing the files, templates, and installing mods, do one thing at a time. This way, it is much easier for you to figure out what went wrong where, because if you do a huge mess of edits and get a 500, and the error logs, for some reason, don't give you an error output, you're blind. You have no idea what you did. It gets very frustrating very fast trying to troubleshoot that way. Love yourself. Yes, you will, at some point, be installing a mod or several. I promise you that. As I said above, SMF's power is in its modding community. There are dozens upon dozens of mods that do all kinds of things, and depending on your needs, and how you want your board to operate, you can find quite a few helpful things in the mod section of the SMF customisation site. I'd definitely recommend looking through it. Someday, you're gonna want a new feature or function SMF does not natively have; may as well make that day an early day, so you can break it without really being afraid of data loss. Spam Controls Here's a big thing, by default, SMF's spam controls are… well, they're kind of lacking. You know, kind of, like how water's kind of wet. It's got some basic who gets to post where without seeing a verification system controls, and then under it, you can set password strength requirements (I wouldn't set them ridiculously high), then the verification image style to use, and then questions. I'll warn you now, chances are, you'll be fighting spam on SMF at some point, especially if you happen to be on a TLD (top-level domain, ergo a .com, .net, etc, without another period in there [rpginitiative.com is a TLD; boardname.rpginitiative.com is a subdomain]). Bots find TLDs very fast. Very fast. You might be able to hide on a /site type URL for a while but eventually they'll get you, too. The good news is, there are ways of making it better, and SMF 2.1 paved the future in gold by building reCAPTCHA into it by default. There will be another, more in-depth guide on fighting spam and the ways I've found to do it that work on 2.0, and continue to hold up, so stay tuned if you need help with that. Member Groups and Permissions Member groups are fairly standard on SMF. It's not really easy to mess these up. Groups actually define permission groups, as well; ergo, groups can inherit permissions from each other, or standalone and be assigned permissions unique to them. This is very cool. One thing I want to say is, member group icons ("pips") must be uploaded to the images folder of the themes (yes, all of the themes you use), and then called by image name and extension. Ergo, if you upload a pip called star.gif, you need to type in star.gif. Permissions can be set per group, per board, and then we have something called a permission profile. This is a specific set of permission arrangements that can be assigned to boards. I typically make one called Guest Friendly, for instance, and this profile grants guests posting ability. Slap it on the boards I want to have guest posting enabled in, and I'm golden. SMF has the ability to assign multiple member groups to a single account (AND you can make them all display, with some file tweaking). Further, you can also set it up so that your members can sort themselves into their own group(s). The latter is extremely helpful on sites where there is no approval process, as players can just sort their own characters out of the box, if you're using SubAccounts (on the character mod, this takes care of itself when creating a character). The multiple groups thing for users can be utilised to give user accounts access to things, as well, so for instance, you can have a beta testing and world-building group that has access to a special board, but additional groups don't show by default, so other users can be left unaware of this special control group. I use it a lot to set myself as a player, and then give myself root administrator access anyway; I look like a normal player, but I still get stuff done. With SubAccounts, you can simplify even the most complex of character grouping arrangements into just assigning more than one group. (Guest: -asks a question- Me in Player Colour: -answers, apparently with something they don't like- Guest: I think I'd rather talk to the admin. Me, suddenly in Admin Colour: -cackles maniacally- Baby, I AM the manager admin! I'm joking. Sorta. It's amazing how some people talk to other members when they think the admin isn't around...) Installing a Theme This is pretty simple, but just in case anyone doesn't know, first, you'll go into Configuration => Themes and Layout. By default, clicking that takes you to Manage and Install, that's where we want to be. Scroll all the way down, and you'll find a header labelled Install a New Theme. Theme creators package their themes, and they will install themselves, so if you have one of these, just click Choose File, select the archive package for the theme, and click install. To create a theme from a directory, just type in the directory folder, and then to make a blank copy of Curve, the default theme, type a name in the last field. If you're doing the latter, which is how we make new themes on SMF and you probably will do this someday, don't use spaces, or fancy characters, in the name. Whatever you type here is what the folder in the file system will be called for the new theme. File directories just really don't like those, in short. Now, if your server runs on Japanese, to be fair, it may accept Hiragana, but most servers aren't about that life. One major drawback of SMF is that themes, good themes, are hard to come by. The good ones that exist are often very generic, and template alterations in premade SMF themes available on their site are very rare. They are also quite difficult to make, if you don't know what you're doing, as they are heavily dependent on PHP, and you can ruin your own life easily when you're getting started with it. Bonus points to, if you're running 2.1, lol that thing's got no themes. Yes, I will eventually get around to the theme guide for SMF, promise. Still doing it! I will say here, it will not be a full, how to do everything you need to know how to do tutorial, it will expect its reader to be able to use HTML, CSS, and some basic PHP, so if you haven't already and are waiting on it, read the PHP Fundamentals guides. You'll be glad you did when we all get around to the SMF theme guides, because it will assume you have some idea of what you're doing. SMF 2.1 also has a known bug where, sometimes, it won't install themes from a .zip archive. You'll have to upload it into a directory in your file manager (preferably the Themes folder), and install it by directory. Kind of rude, but easy enough to work around for now. For some reason, it was fixed, at one point, and then someone rolled it back. No clue why, but here we are. Might've been an accident to be fair. Language Support If you poke around the SMF ACP a bit, you'll find a languages section. Here, you can search up, and download/install, language packs for practically every language in the world. Practically. If you run a site in another language, or you, or some of your members, may find navigating the forum easier in their native, non-English language, you can download and install language packs for any of the languages that you or they may speak. This is, and is not, useful for role-play forums, so just know it's a thing that's there. I will tell you, there's a typo in the Vietnamese package in the admin panel language file, and many of the languages don't work so hot with UTF-8. Not sure why, but, here we are. If you're not sure which one to use, you could always install both. To uninstall a language, you need to find all the language files in the languages folder for it, and delete those, then remove all the language-related images (usually in a folder of their own in the images folder). If you are fluent in another language, mod writers almost always are interested in fluent speakers translating their mod's language files to another language, so don't be afraid to contribute these if you're interested! So if you find a mod you want to support, see if they need translations for your language. It's an easy way of helping modders out (and we love our modders). Adding Categories and Boards This is pretty easy, but! To add new categories and boards, visit the Forum => Boards section. Then, click Create New Category, to make a new category, or click the button titled Add Board under a category's board listing. Categories have a position, a name, and whether or not members can collapse that category. In SMF 2.1, categories also have a description, which show beneath their name. New boards have a category, position, name, description (and it does accept HTML!), a permission profile to use, groups that can see the board, forum moderators, redirect options, whether to count posts in it, and the theme to use for the board. You can install a mod that will give you control over the board's sort method (what order it displays threads in, and what key it uses to order). If you do not tick the box for a member group in the allowed groups list, that board will not show to users sorted into that group. Of course, post groups can be ignored, unless you want to restrict a board's access by post count (that's a thing you can do). When adding moderators, it uses a script that will look up a username as you type it, and then you can click from the drop-down; if this script does not work (a lot of the time, it will break on a theme other than the default Curve or Core), you'll need to enter a comma-separated list, no spaces. Category and board controls are pretty intuitive. They also separate themselves visually, quite clearly, so you can easily pick out what links are for what board. Quick note on how group access works for boards: say you have Board 1, and then as a child of Board 1 is Board 2. Board 2 has access ticked for Group 1, but Board 1 does not. If someone in Group 1 manages to get Board 2's link, they can still see it, but it will not show on index under Board 1 because Board 1 won't show. This means you can sort of make hidden boards. Sort of. User Avatars I'm going to be blunt; SMF 2.0's default handling of avatars is the dumbest thing I've ever seen in my life. In short, SMF uploads avatars as attachments, and then links it to a member ID instead of a topic or message ID. Then, it takes the image the user uploaded, encodes it with an image hash, and saves it in the filesystem as just a file. No extension, just a file with the image hash as its name. Only SMF 2.0's stupid avatar system can do anything with it, and people with more patience than I have. It then displays the avatar with an attachment download link instead of an image link. Now, I will say, if you really don't care about that (and it may deter hotlinking, I can't remember off-hand, hotlinking is one displaying the image with your link on a site that is not yours), you can leave it as-is and it'll work just fine. Alternatively, you can set a custom avatar location. Forum => Attachments and Avatars => Avatar Settings. Scroll all the way down, and find Upload avatars to… - change this to specific directory, and then type in a directory location, and what URL that would be accessed on. If it comes up red, you need to either create that directory in the filesystem, or, adjust the permissions so that it is writable. What this does, is, it makes SMF handle avatar images… like actual images. Ergo, it will rename the file avatar_memberidnumberhere_randomhashhere.whateverextension, and then move it to the directory you indicate it should, and not mess with it beyond that. So in your folder is an actual image. Yep, yep, much better, if you intend to do anything with avatars, such as display them somewhere they don't normally display, and don't want to play "let's decrypt image hashes!" I know I hate that game. Fortunately, while SMF 2.1 has the functionality for image hashing, it doesn't do it by default. Thank the stars for that. (Oh, 2.1 also has support for Gravatars!) Notice: I should never see someone pulling the entire $memberContext array for one thing, like avatars. It is not a good idea. There are many reasons why not, but we'll start at security concerns, because you're pulling all of your members' information right there, and end with that's a huge array loading and hitting your server's RAM/CPU every time you load it. Every single time. Arrays are resource hogs. Because they load a huge number of strings at once, the fewer strings you're pulling, the better. If you don't need an array that big, don't pull an array that big. If you need a thing somewhere and don't know how to get it there, ask me. I will gladly walk you through doing it. Gladly. Seriously. Forum Maintenance Alright, there are a few things in the Maintenance drop-down I want to look at really quick. First, let's get into Maintenance => Forum Maintenance => Routine. Here, we have some controllers for checking for file updates, finding and repairing errors, recounting totals and stats, and emptying logs and the file cache. What's all this? You can safely ignore the first one; this just checks the version of the source files that you have against the ones on SMF's official servers, and the thing here is that you're probably always going to have a few older files. That's just sort of the nature of SMF's updates. If the board works, oh well. Finding and repairing errors is a good idea to do occasionally, especially right after an account or thread clean-out. If you delete things, it breaks some database links between thing a and thing b, and it doesn't break anything on the board, not visibly, but it's still good practice to prevent the database from getting all weird, or storing data it doesn't need for members that don't exist anymore. Recounting the totals and stats will recount the board topics, replies, PMs, members, and so on, so if your board counts or stats get off, you can usually fix them with running this. Emptying the unimportant logs is really kind of obvious, as is emptying the file cache. The latter causes the board cache to be dropped; SMF will cache certain files, as well as member data and other Really Memory Intensive things. If you do something major to your member numbers or suchlike, it's not a bad idea to clear the file cache (ergo, if you go on a mass delete spree, your stuff's probably all off, clear cache and recount). From here, let's go into Forum Maintenance => Database. Here, we can optimise all our database tables (clears overhead and makes the table smaller, and run smoother), save a database backup, and convert HTML entities into UTF-8. This does what it sounds like; instead of the database storing &#945;, it will store instead α. This makes searching and sorting cleaner, and also reduces storage size in the database. Not a bad idea if you use a lot of fancy characters (and funny enough, it stores punctuation that way, because that's brilliant). Now let's go into Forum Maintenance => Members. This section has Reattribute User Posts, and what this does is it gives post ownership to a member, of guest posts made by a certain email address, or username. This is great for moving forum posts over manually, because you can name characters unique names, like nicknames, and then reattribute them, and boom, posted by them, even if that account doesn't belong to you. I've made use of this for exactly that purpose many times. You can also assign Simple Machines' introduction post to you instead of deleting it, so you can have topic ID 1. Finally, there's a remove inactive members option. This deletes all accounts that have not <insert thing they haven't done> in x days, in certain membergroups. Useful for mass inactivity purges. Root administrators (group ID #1) should be immune to these purges. Board and Moderator Logs Now, remember up there when we were doing the Core Features thingabob, and I said something about turning logs on? Well, if we've got them on, they log: administration actions; moderation actions; profile edits. You can see two of the three in the ACP, by going to Maintenance => Logs => Administration Log or Moderation Log. Administration logs will log key actions in the ACP by varying different members that have done it. These logs will display: adding, editing, and deleting boards and categories; adding, editing, and deleting member groups; pre-registering or deleting a member; installing and uninstalling package mods. It will also log IP address, so if, somehow, someone else gained access to your ACP that should not have access to it, you can see this person's IP address. But, quite frankly, if they have access to your ACP, the damage is done, you're screwed, sayonara. Now, we can also access profile edit logs! If you're super duper paranoid about it, and you have character biographies in profile, you can go to someone's profile, hover over Profile Info and click Track => Profile Edits. From here, you can see the changes to every profile field in the profile, what it was before, what it was after, when it was changed, and who by. Error Logs One more thing: your error logs. These are found in Maintenance => Logs => Error Logs. You can turn these off! Don't. These logs will pull any errors that a user generates, or that PHP or MySQL/MariaDB output that are important for you to know. Failed logins and ACP attempts are in here, as well as anything that's problematic, but not fatal. When something doesn't work, the first place to look is here. It'll give you an idea of what happened, what line it was, and if you click on the file name, it'll actually highlight the line it's talking about for you. Troubleshooting basic errors is kind of a fact of SMF life. Become one with the error logs. Be the error logs. Oooohmmmm... Joking aside, don't ignore errors in here just because you don't know how to fix them. Bring them to us. We fixes them. Modifications to Consider This is really kind of just a list-dump of modifications that I find myself, and many other SMF users, coming back to time and time again. Some could consider these something of a must-haves list for plugins, but really, it's all about what you're looking for and how you want your board to operate. Search around the SMF mod site a bit, you'll probably find something for what you want. If not, post on the board here, I might be able to do it. Listen, hey, hey listen, because I'm gonna say this once and never say it again anywhere else, listen: the Battle Suite started with a series of flat-file random generators that I said I couldn't do. Everyone else told me I couldn't make it, either. I have a very long track record of saying I can't, and then proving myself wrong. Even if it's the most harebrained, inane, off-the-wall idea you can think of, ask on the Initiative if it's possible, because it may very well be, and it may even be easy. If you can't find a mod for it, ask. I may know where one is, or be able to make one relatively easily, or be able to tell you how to do it yourself, depending on what it is. I will also say this: the general SMF community has a long track record of being really rude to its user-base, particularly role-players because they don't understand what role-playing is about and tend to be vicious toward that which they don't understand. They don't tend to be terribly helpful even in pointing people in the right direction if you've got no idea what you're doing, and I've had mod writers be unable to make alterations to their own mods before, too. So, even if you need help with a mod for SMF, I will help you. Please come to me and not them; they are not nice. BBCode With Style: Do you like doHTML? Yeah? This is the mod for you. BBCode With Style expands the base BBCode system to include div, span, and adds extra parameters to img, table, and td, so that you can more closely mimic HTML coding. This is the shizzie. I've, many, many times before, converted an HTML/CSS code into a BBCode with this mod. Bookmarks: So what this does is, it logs threads as bookmarks under a user account. It's useful, as a semi-automatic thread tracker, but unless you do expansions, they're just kinda there, and moot if you use the character mod (on subaccounts it can make a decent, basic list of threads a character's been in for you). Custom BBCode: Take the "What??" out of adding your own BBCodes. Yeah, you can use this to make like a YouTube BBCode no problem. You don't need all those stupid little mods that add in just that ONE BBCode, just add them all with this. It works in theory like Jcink's BBCode manager, but it's a bit more powerful. Custom Board Sort: This mod adds a selector in board creation and editing, where you can decide how threads are ordered in a board by default. Want it alphabetised by subject? You can do that. Menu Editor Lite: We all want to edit the navigation bar. The problem is, that navigation bar is actually kind of a pain to edit on your own. This handy mod creates a visual click and type and click affair of deleting, rearranging, editing, and adding, buttons on the main navigation menu. It doesn't recode it, sadly, it just helps you do what you want with it. SimpleColorizer: This is an easy, painless hook install that colours profile links no matter where they are or what they're named. If it links to a profile, it's coloured via member-group of the account it links to. Everywhere. I mean everywhere. SimplePortal or TinyPortal: Look, portals are frand. You can make your own custom landing splash page, or integrate it and easily add sidebar and top-bar blocks to your board, create custom pages (even PHP ones, which is how we do automatic lists on SMF, like set it and forget it face claim lists, it's fab). SimplePortal comes with a shoutbox, I don't remember off-hand if TinyPortal does, but that'll save you cbox costs. SimplePortal is the most aesthetically pleasing and interface-logical one, but TinyPortal works on 2.1. @mention Members: … this is really pretty explanatory, isn't it. Unfortunately, you'll have to mod in an alert system for it, or no one will ever see their @s. This may have changed. It may also operate on emails, I have no idea, gbh. (My server's on a dynamic IP and emails coming from it are automatically rejected before it even hits the spam folders, so I don't know if it does.) Users Online Today: Why this isn't a default feature, I don't know, but whatever. Drafts: Does what it sounds like! Allows users to save posts as drafts, and come back to them later. Order Custom Profile Fields: Drag, drop, rearrange your profile fields, into a sensible, logical order, for ease of creating profile apps/bios. ReCAPTCHA for SMF: Get it. Please. Just get it. SMF 2.0's anti-spam controls are out of date and don't work reliably anymore. reCAPTCHA requires a set of keys, but they're free to get. SMF Character Manager: You can find and download this here on the Initiative, written by me. This is an alternative to SlammedDime's SubAccount mod, more streamlined for RPG sites. Unlike SA, this mod is actively supported and will be updated in future. It's been rebranded to SMF Character Manager; 2.0 will be the last version that guaranteed works on SMF 2.0, and also the last fully featured free version. (There will still be a free version, you just won't have certain functionalities, like the status streams will be taken out of the free one.) Character Manager 2.0 comes with character journals and the ability to create auto claim lists out of any bio field in the system, no code necessary. Notable: SMFPacks Advanced Editor: Replaces the old, clunky, doesn't-even-work-anymore WYSIWYG that shipped with SMF 2.0 with SCEditor, which is grand. It is paid though. (Bet you had no idea SMF even HAD a WYSIWYG, huh. Yeah, it's okay, it took me about five years to find it.) On 2.1, SCEditor is built-in. ENotify: Ajax-powered push notifications for quite a few things, but last I checked it was a wee buggy. It's been updated since, it may be less so now. Member Awards: I actually have no idea if anyone has this on the internet anymore, I do have it though, if anyone wants it. Easy peasy member awards, many of which can be automatically awarded by the system. Things like post count and registration anniversaries can be auto. Notes About SMF 2.1: This goes against everything in me, but, I'm gonna be honest, if you're feeling brave, run 2.1, yes it's a beta but run it anyway. Why? Its core is far more robust than 2.0's, Curve2, 2.1's default theme, is mobile responsive out of the box, it has alerts built in, @mentioning, post likes, SCEditor, drafts and autosave of drafts (and both bloody work), reCAPTCHA is built in, a lot of little things in the admin-side controls are improved on, it's just better. It also supports IPv6, and runs on PHP 7.2, and … I'm gonna be straight with you. PHP 5.6 is about end-of-life. This means running PHP 5.6 on your server will become a stupid idea because PHP will not be releasing security patches. Eventually, potentially quite quickly, PHP 5.6 will become full of security holes, and make your server vulnerable. Likewise, PHP 7.1, the last version SMF 2.0 runs on cleanly, will reach end-of-life in another year and some change. With the progress pace that the SMF development team have been making with 2.1, it's not releasing anytime soon. Start using it. Get accustomed to it. Because it is SMF 2.x's future whether they release it into RC tomorrow or in another year. The only problem I've had on SMF 2.1 is guest-posting does not activate verification, the setting for that is messed up, so you'll need either a log in for ads, to set a min-post count for verification to trigger, or just to forego ads entirely, and there are some theme quirks (sometimes, installing through package does not work, you have to upload it into a folder in /Themes manually and install through a folder in the directory in ACP, and the board avatar on index feature in themes does not work out of the box). I'm here. Okay? I'm here, ask me for help, I will help you, for the love of all that's good in the world, get your server off PHP 5, run PHP 7, and you'll love SMF 2.1, I promise, give it a go. I have reached the stage where 2.1 has seriously made me hate 2.0. I hate working with 2.0 now. I really do. After ten years of 2.0 I am so ready for 2.1. Hopefully, I didn't scare anyone. Haha! As I said, SMF can be greatly rewarding if you learn to speak its language, and 2.1 is a respectable improvement on 2.0, at least, it's not like "Why did they even bother because nothing is better," it's just not quite the giant leap forward that many were expecting it to be, considering how long it's been in development. All of SMF's development team are volunteers, and make sure to take their time and get it right. You know what they say, "Cheap, fast, good: you can have cheap and fast, but it won't be good; you can have fast and good, but it won't be cheap; you can have good and cheap, but it won't be fast." SMF is like the embodiment of that. If it makes anyone feel better, they are still actively making updates and changes to 2.1 Beta 4, I've been watching it on GitHub. It is happening. I've also heard rumour that 2.1 Beta 4 may end up the RC version, and we're finally at the point we're talking RC at all. Anyway! I do have a long, long list of focused guides and tutorials specific to SMF that I will be posting, so stay tuned for more SMF guide stuff. Till next time! (Are y'all getting tired of me yet?)
    3 points
  11. HARNESSING THE POWER OF IPS PAGES a documentation by Mousie First of all, what is IPS Pages? Pages is a component of InvisionPower Service's community suite that allows you to create, store, and manipulate data outside of your main forum structure. Formerly known as IP.Content, the system has evolved into three main sections: Pages, Blocks and Databases. All three of these elements can be utilised to create features unique to your forum. At it's base, Pages is a content management system. The addition of custom databases and build-your-own PHP blocks means that Pages is far more than just a place to store your articles and other information. Some interesting ways to use Pages include: A character application system that takes information via a form, and outputs it to a beautiful character sheet (without the member needing to navigate any code) A job board that can be updated in just a few clicks A full timeline system that members can submit their own events to A play-by/face claim system that automatically lists all faces in use A fully automated scoring system that updates once an entry is submitted An enrollment/sign up system that can be searched and entries filtered And those are just the examples I've tried myself. Here on RPG Initiative, almost every feature is run through Pages. That's right! The RP Directory, Play-by Directory, Writing Partners, and yes--this guide you're reading right now!--are all built off the incredibly flexible Pages system. So let's break it down a little, and see what Pages has to offer. The three main elements As I said above, there are three main elements to Pages: Pages, Blocks and Databases. You can see here that Pages and Blocks are listed under Page Management, while Databases is listed under Content. But what exactly are they? Pages Pages is exactly what it sounds like---a function of the app that allows you to create custom HTML pages to display on your site. In most cases, you will create Pages to display Blocks or Databases, but you may also wish to use them to display content of your own coding. There are two ways to build a page: Page Builder: This allows you to use the > symbol at the left-hand side of the page to drag and drop premade blocks onto the page where you would like them to display. This is recommended for most pages, as drag and drop is way more fun than finding where you coded that pesky element into the template! Manual HTML: For complete control, or if you want to display content that is not contained in a block, you may choose to use the manual html option. In either case, you will be asked whether you want to use the "suite HTML wrapper", which basically means that you won't need to manually code in things like the header, footer, and other fun (but annoying) stuff. Blocks Blocks are essentially chunks of code that serve a particular purpose. Perhaps there's a list of links you would like to display in multiple locations on your site (but don't want to update five different versions of the list every time you want to add or remove a link), or you would like to display more dynamic content such as an online user list or recently updated topics. Blocks allow you to create a widget-like structure that you can drop into place, code into a template, and re-use as many times as you need to. Blocks can be placed in the sidebars of your forum system, beneath the forums, above the forums, beside and around databases, in fact--anywhere you can drop a block in Page Builder, or anywhere you can slip it into a template! In the example below, both the timeline listing and the timeline menu are constructed with Blocks. And here? Each of the house point scores (the numbers themselves) is its own block, nested within the larger House Points block (which is contained by the Header block) You can nest blocks to construct complex pages, which is useful if you'd like to divvy up your code so you can find what you need to edit easily. I have separate blocks for News, Events, our current banner, and so on. I hate reading through lines of code to find the segment I need to edit, and with Blocks I don't have to. So blocks can make building and updating your site a breeze, but that's not all they're good for. But first, let's look at the types of blocks you can create. Block types There are two main types of blocks that you can make use of: Custom: This allows you to use your own HTML and/or PHP to create the block and the output it will display. Plugin: This utilises existing feed sets to quickly build a block that suits your needs. The list of plugin blocks typically available includes things like users online, feeds from your databases, recent topic blocks, recent posts, status updates, and a whole range of other functions that are built into the board. This is not the full list, but you get the idea. If you choose to delve into Custom blocks, you'll get the following options: Editor: This is the WYSIWYG editor you get for posts. It's most powerful when being used for fancy formatted text and links. Manual HTML: Like the box says, here you can use your own HTML codes. Good for blocks that require more HTML structure than the Editor will do easily. These are ideal for structuring headers and menus. Manual PHP: Here the fun really starts. PHP blocks can access database information, manipulate data, and display information in a meaningful way. In the above example of the house points block, the point totals are never manually updated. They are calculated by a PHP block that displays the numbers in the header like magic) Getting your head around Blocks can be a challenge, but it's worth it! Databases The last of the main elements, Databases give you a whole new way to store and retrieve information. Within Pages, you can create an unlimited number of databases, each with their own custom fields, for almost any purpose you can think of. An RP forum might use a database to manage and display character bio sheets, to hold board and setting information, or to run a quotes and highlights system. Databases combined with PHP blocks to manipulate the data contained inside them can create a face claim list that updates when applications are approved (without needing to be edited? You read that right), and even the timeline system shown in the example above. Information contained in Databases is also given a higher priority/rank when indexed by search engines (unless your sitemap is configured differently). That means that Google is more likely to use this content to find and index keywords than it is most other content on your forums. Keeping your main information contained in an articles database is highly recommended. For all the versatility they offer, databases are relatively easy to set up. As said above, RPG Initiative makes use of databases in different ways across the board. The RPG Directory and Roleplaying Guides systems are two great examples of the same software being used in different ways to offer different services. Structuring Databases Databases can be set up very similar to forums, as categories that contain other categories. Or, you may choose to store all your records for a database together. There are pros and cons to both options. As database records can be filtered by certain fields (see below), you may find it useful not to have categories at all as members can use the filters to find the content they're looking for. Here at RPG Initiative, we affectionately call this the "Morrigan's Heathen Chaos method". Database Content Database content has three main components: the title, the content itself, and any additional custom fields. If enabled, you can also assign prefixes and tags to your database content (useful if you want to use a particular tag to mark your essential information, and so on). The title: will determine what the record is called in the display and listing templates, and must be a text string. The content: will be the primary chunk of information stored in the record, usually a longer piece of text (such as an article) or a description field. The custom fields: additional content that is not being used as the title or content. You can set a custom field to act as the title or content, depending on what type of field it is. Fields assigned title/content will display a little differently in the default templates. Custom fields I'm going to go into the custom fields available through Databases, even though (for the most part) they are the same fields found throughout the IPS suite. Many of these fields can also be used as custom fields in the Profile system of the core app. By combining different types of custom fields, and modifying templates to suit how you want the information from your database displayed, you can create automated lists, code-free applications, and easy ways for members to submit content for a variety of purposes. I have skipped over Spotify/Soundcloud and YouTube fields. In the examples below, a field that is "filterable" means that it can be used to search and narrow down results in the record filter block. "Unique" means the field can be set to only accept values that are unique in that database (eg. the field cannot contain the same content in more than one record). "Multiple selection" means that more than one answer can be selected/submitted. Address: A full address field. Filterable: No Unique: No Checkbox: A single checkbox that can either be ticked, or unticked. Filterable: No Unique: No Checkbox Set: A set of checkboxes that can be ticked or unticked. Filterable: Yes Unique: No Multiple Selection: Yes Code: A box that will accept code, and format it appropriately for display. Filterable: No Unique: No Date: A date field (optionally including time input). Goes back as far as 1901. Values stored in database as a Unix timestamp. Filterable: Yes Unique: No Allow time input: Yes Editor: The full WYSIWYG editor common to most posting areas of IPS. Allows for easy formatting of large text areas, HTML use, and an upload field (optional). Filterable: No Unique: No Email: An email address field that will only accept a valid email input. Filterable: No Unique: Yes Database Relationship: Select record(s) from another database on the system to connect with this record (example below shows linking to an available job post record). Outputs a direct link to the record(s) selected. Crosslink Records: Yes Multiple Selection: Yes Member: Select a member to link in the field. Outputs a linked and styled username display. Unique: Yes Multiple Selection: Yes Number: A field that can only be filled with a valid number input. Unique: Yes Filterable: No Password: Input converts to stars for privacy. Unique: No Filterable: No Radio: Radio select button, single answer only. Unique: Yes Filterable: Yes Select Box: Common drop-down style select box. Allows for multiple selections. Unique: Yes Filterable: Yes Multiple Selection: Yes Text: Single line text box. Unique: Yes Custom input validation: Yes Accept HTML: Yes Text Area: Multi-line simple text box. Unique: Yes Custom input validation: Yes Accept HTML: Yes Upload: Upload field for images and other files. Allow multiple uploads: Yes Thumbnail dimensions: Yes Image dimensions: Yes Images only or any files: Yes URL: URL input field that will only accept a valid URL. Unique: Yes Filterable: No Yes/No: Simple toggle switch, yes/no answer option. Unique: No Filterable: Yes Database templates Database templates determine how the information contained in your database will be displayed. You can have a variety of different templates assigned to different databases, which means you can design a look and feel that reflects the purpose of the database. Think about how the RPG Directory here looks and feels different to the Guides database. The template types are as follows: Category templates: this determines how the database categories will look and be displayed. Listing templates: this determines how the records look when in a list display. Display templates: this determines how the full record will display when on its own (think: character sheets, RPG listings). Add/edit form templates: this determines how the form to submit a record will look and feel. You can add and edit templates using the Templates section of Pages (note: not the main theming templates). Wrapping up Now that you've seen a little of what Pages contains and can do, hopefully you've got some amazing ideas! If you're not sure whether something is possible, post it below---let's see if we can figure it out! And I'd love to see your creative and innovative ways to use Pages, the greatest app in the IPS suite!
    3 points
  12. IPS vs JCink Premium --->THE SHOWDOWN<--- So you're building a new roleplay forum, and you're ready to make the first (and very important) choice of what software to create it on. As with any administrative decision, you should always go with the system that makes you feel most comfortable, and that suits your style. Never choose a forum software simply because you believe it's "what people want". JCink may be the preferred flavour at the moment, but there was also a time where JCink was considered horribly scary compared to the then-preferred Invisionfree. Software tastes and comfort levels change. Start by making the decision for yourself, and the members will come. Plus, you won't be stuck with a forum software that you don't like. But that doesn't mean you need to stay inside your comfort zone, or that you should stick only with what you know. In the following guide, I'll take you through the features and benefits of the professional IPS forum software, and how it makes for a fantastic RP board. To give you an idea of how much power is available, we'll be comparing it to JCink Premium. And if you're not sure if you like IPS as a software --- you're using it right now! As a user, IPS4 feels a lot like JCink. Just a little shinier, more polished, and newer. But we'll get to why that is later. Let's start with the difficult part first. 1. THE COST Cost is always an issue. One of the reasons JCink and Invisionfree are so popular is the free options they offer. If money is your greatest concern, JCink may be your best option. That said---if you're looking to go to JCink Premium, it's definitely worth looking at the base IPS plan. JCink Premium: $10/month (can be used for five sites) IPS: $30/month (one site, but heaps of extra features) Unless you plan to run five different sites off your JCink Premium account, you'll get far more value out of IPS. 1a. ONLINE VISITOR LIMIT One factor that often stops administrators from considering IPS is the "online visitor" limit. It's explained terribly in the documentation, and sounds like you can only have 40 active users. Not true. "Online visitor" refers to a single unique IP address browsing the site. It doesn't take into consideration how many registered accounts are on the board, only how many IP addresses are present. This number is also averaged over a 48-hour period. So in order to max out the base plan, you would need to have 40 unique IP addresses browsing the site every half hour over 48 hours. If you allowed each member one half-hour block every two days to browse your site, you wouldn't max out this plan unless you had more than 3840 unique members (not accounts, unique IP addresses). In fact, 40 unique visitors would need to be constantly online for 48 hours before they reached the second tier of the plan. Most RP sites don't reach those numbers. The software is built for commercial use, and we're down at the happy fun hobby scale. But -- even if you do exceed that limit? Your plan will automatically be bumped up to ensure no downtime, and you have the choice to remain at that upper level or downgrade if it was a one-off surge. 2. THE SOFTWARE Did you know that JCink is built on the original IPS software? IPB version 1.3 was released in late 2003, and was the last of the "free" IPBoard releases. That's why the software is so common among free hosts. It was also notorious for exploits (which were patched by the company while it was still being supported, new exploits need to be patched by the hosts that offer IPB1.3 hosting services). Although JCink is still technically being "developed" by JFB, the core of the software is fifteen years old. There will come a point where modifying/patching the core will no longer be as viable as moving to a completely new software, but it's done pretty well to last these fifteen years! If it was a song, the radio would be playing it under "hits and oldschool" by now. IPS4, the current version, is under active development. It's designed to work with the internet as we know it in 2018, and with other devices that have infiltrated our lives over the past fifteen years. Getting IPB1.3 to be adequately responsive on a mobile device is a challenge, but IPS4 has it built in. This also means that any potential exploits, bugs, or other sticky situations are dealt with fast. IPS provides service not just to us little roleplayers, but also to big and very important companies who do not like when their websites break. John and JFB do an amazing job of supporting IPB1.3, and it can't be understated how fantastic it is to see them bring out additional features to old software. But if you're looking for something that is under active development, and constantly moving toward a new version with better features: it's gotta be IPS. 3. OH, THE APPS When you sign up for cloud hosting with IPS, you get more than just a forum. You get: Pages (databases, blocks and webpages application) Blogs Gallery Clubs Calendar (one that works) You also have the ability to download additional third-party applications and plugins from the IPS website. Most have a cost attached, but some very good and basic ones are free. Pages is more than just a simple web page maker, although it does do that as well. You can read about how much I love Pages in my documentation. From creating databases to store articles, applications, bits of information, keep scores, to making blocks that display the latest feeds/statuses/blogs/open threads/whatever you like, Pages will be the best friend you didn't know you need. Blogs is as it says on the box: the ability for members to create their own blogs outside of the forum system. You might use this for in-character diaries, or something else fantastically creative. Gallery is another simple feature that could be used to great effect. Have amazing artists on your board, and want to showcase their work? Clubs (or "coteries" as they are called here on The Initiative) allows members to create their own groups, public or private, that contain their own little forums. This could be used for any number of things, in-character clubs, common rooms, organisation groups, anything. Calendar... and yes, it works. It's not especially elegant, but let's be honest: it can't be worse than what IPB1.3 kind of has. You can create events that go over a date range, and install sidebar blocks that show what's happening/upcoming. Ideal if you want to create a schedule of RP events in progress or coming up! Also, you can display multiple calendars in different colours, which is pretty neat. All of these apps are included in your base price of $30/month. Not bad for just $20 more than JCink Premium, right? 4. CONTENT RESTRICTIONS There are two key reasons for purchasing a JCink Premium subscription. You want to get rid of ads, because they're dumb to style around You want to lift the content restrictions to run a 333 site IPS is not ad-supported, nor does it have content restrictions beyond what would be considered illegal content on any server in the USA. So as long as you're not looking to run a criminal content delivery system, you'll be absolutely fine! 5. THEMES, TEMPLATES, AND DELICIOUS CONTROL JFB brought in the Templates system, which was a revelation. Imagine being able to re-create the code for individual pages and have them display exactly how you want! Get ready for your mind to be blown. In IPS, every template is editable. We don't recommend you edit every template (most changes can be done with CSS) but you can do it. All of your database pages can be templated individually as well, and you can have one database styled to look completely different to another---depending on what you want to use it for. Most times, users don't even know they're looking at a database. Did you know you're reading an article off one now? Surprise! If you're not so keen on getting deep into the CSS, there's also an easy mode. A few simple boxes that you can select colours from to style the forum away from the default blue and white. And yes---you can combine this easy mode with a few basic CSS adjustments to make it your own. Or, if you want to get your hands dirty, here's "hard mode": Look at all that control! Delicious! 5a. LET'S GET LOGICAL IPS also has a "template logic" system, which allows you to input basic if/else, loops, and scraps of PHP into your templates. Extremely useful if you have a head for code, and in future guides I'll be stepping you through some basic code snippets that I've found useful (and I've only been learning this since February, so don't be discouraged if it looks overwhelming to you now!). 6. RESPONSIVE AND SEXY IPS4 is built around responsive design. That means it behaves differently depending on the screen size. When you access The Initiative on your phone you'll get a different view to what you see on your desktop. Elements are adjusted, removed, or added, to make the forum easier to navigate on a device that particular size. Also, did I mention the ACP is just straight-up sexy? 7. SUPPORT It's unfair to really compare the support levels for JCink and IPS. One is a complete commercial solution, the other is doing the best they can with what they've got. Needless to say, when something goes wrong with IPS it doesn't take long for them to get down to the bottom of the issue and resolve it. You are paying for support at this level, and it's absolutely worth it. Third-party applications that require a purchase are also supported by their creators. How well they're supported depends on who made it, and it's always worth looking into the comments if you're not sure about a particular developer. 8. QUICK-FIRE ROUND Feature JCink Premium IPS Access to database (self-backup) Yes Yes Status update feature No Yes WSIWYG post editor No Yes HTML in posts As doHTML Cleaned HTML via "Source" Editable templates Some All Theming "easy mode" No Yes Account link available Yes Yes (as third-party application) Apps outside of base forum Calendar, basic web pages Pages, blogs, gallery, links, calendar Drag & Drop page editor No Yes, drag and drop widgets/sidebar blocks Responsive Not natively Yes Secondary user groups No Yes Analytics built-in No Yes SEO friendly Not very Yes Use same email for multiple accounts Yes No* Discord integration No Not native - can be achieved via third-party application** * IPS does not allow the same email address to be used twice as the email address is also a unique account identifier. To get around this, you can use Gmail Aliases, or turn off email validation for secondary accounts. ** You know how the spooky bots in the Initiative Discord post links in the chat when you submit a topic? You can make your own spooky bots using IPS with Discord integration. 9. YOUR QUESTIONS Something I've not covered? Anything you want to know, about a particular feature or a difference between IPS and JCink? Ask away!
    3 points
  13. This is a base for a mini profile that you can either hover over or click onto, to reveal more information about the author. I built this in response to the problem created by hovers: they do not necessarily work for iOS devices. Adding a click function allows all users to access the information usually found with a hover. Preview - Codepen I'm using the checkbox functionality to achieve this, no need for javascript! You need to post the following HTML into the appropriate place in the postbit template for MYBB, or in the miniprofile template for JCINK: <div class="miniprofile-container"> <label class="miniprofile-label"> <input type="checkbox" /> <div class="miniprofile-front">{$post['useravatar']} for MYBB or <!-- |avatar| --> for JCINK</div> <div class="miniprofile-back">{$post['user_details']} or whatever you want for JCINK</div> </label> <div class="miniprofile-name"> Name </div> </div> The div: miniprofile-front contains the avatar. The div: miniprofile-back contains the user information. For JCINK, you simply put the information straight into here. For MYBB, you need to put in the user details variable and then edit the postbit_author_user template. Next is the CSS! You can paste this into the usual places. I've inserted comments to explain what some of the properties are for. .miniprofile-container { text-align: center; width: 250px; } .miniprofile-container input { display: none; /* hide the checkbox */ } .miniprofile-label { display: block; /* ensure the label covers the entire avatar */ height: 400px; /* same height as the avatar */ width: 250px; /* same width as the avatar */ position: relative; /* necessary so that we can use absolute on miniprofile-back */ cursor: pointer; /* turn the cursor into a hand so that users know that they can click on the avatar */ overflow: hidden; transition: 2s; } .miniprofile-front { height: 100%; width: 100%; } .miniprofile-back { background: rgba(0,0,0, .5); color: #fff; height: 400px; /* same height as the avatar */ width: 250px; /* same width as the avatar */ position: absolute; /* we need the back to occupy the same space as the avatar! */ left: 0; /* occupy the same space as the avatar */ top: 0; /* occupy the same space as the avatar */ opacity: 0; /* hide the back! */ transition: 1s; } :checked ~ div.miniprofile-back, .miniprofile-label:hover .miniprofile-back { opacity: 1; /* show the back! */ } And that's it! You should now have a cross compatible mini-profile. You're welcome to use this however you like! Hope this helps someone
    2 points
  14. Resources used: https://www.tablesgenerator.com/html_tables# https://www.w3schools.com/cssref/default.asp https://fonts.google.com
    2 points
  15. So with IPS the default avatar is small to say the least but it also must be square, which doesn't leave room for that awesome profile style that many a roleplayer loves. It is still possible but it takes a little extra work. Please note, that by doing this you must manually add each of your Profile field items to your authorPane otherwise this image will show twice. First off, you need to create a Profile Field in Members > Member Settings > Profile For me I just named it "Big Avatar" and used the following settings: The group does matter so if you intend to separate it out I recommend to do it now. But I chose not to show it on the profile, no real point to do that, but to show it in posts with the following code. This code will grab the file and add all necessary upload options to it. <img src='{file="$content" extension="members"}' /> Next we need to edit your Post template. To do that go to Themes > Themes > Click on the < / > icon next to your theme. I certainly recommend this be a test theme to start. In this first list you'll need to find postContainer. It is forums > front > topics > postContainer Here you need to find this: {template="customFieldsDisplay" group="global" app="core" params="$comment->author()"} Remove it. This removes the duplicate field bit. Next you need to find this: {template="userPhoto" app="core" group="global" params="$comment->author(), 'large', $comment->warningRef()"} And replace with this. But there will be something you will have to replace with your own variables and I'll show you how after this section: {{if $comment->author()->contentProfileFields()[core_pfieldgroups_2][core_pfield_2] != ''}} {$comment->author()->contentProfileFields()[core_pfieldgroups_2][core_pfield_2]|raw} {{else}} {template="userPhoto" app="core" group="global" params="$comment->author(), 'large', $comment->warningRef()"} {{endif}} This is the bit you need to focus on: [core_pfieldgroups_2][core_pfield_2] This first part [core_pfieldgroups_2] is the profile field group or category. The latter part [core_pfield_2] is the profile field itself. So the easiest way to find this is to go to your Members > Member Settings > Profile and look at the URL when trying to edit these: If that doesn't work go to the URL and copy and paste it into an editor or use your handy dandy inspect tool for each. Once you've done that I recommend one last bit, since not all users know how to resize images. It's always best to add a little bit of preventive CSS to your custom.css: .cAuthorPane_photo img { max-width: 250px; max-height: 400px; } This will guarantee that the avatar isn't over the size of 250px width and 400px height. There is plenty more to expanding the author pane but this will at least give you a little direction and possible help you create an awesome custom mini profile for your OOC accounts.
    2 points
  16. One of the things I find useful as both a staffer and a member is having a list of all my subscribed topics displayed on every page. This means I get an update on every thread whenever I log in and it means that I don’t need to manually keep a list updated. In jcink, we can do this with load(). This is exactly as it implies, it lets you load information from another webpage. To mitigate server load (and prevent your site from getting in trouble for resource usage), we bind load to a button. This means that your user needs to click on the button to see their subbed threads. Since this button only needs to be used by members, I hide it from guests to prevent curious visitors from making pointless requests of the server. I presume you know how to hide something based on usergroup, so I’ll focus on the code for the Auto Thread Tracker. Put the following HTML where you want it. <a href="#threads" id="button-tracker">Thread Tracker</a> <div id="threads"> <div id="thread-container"> </div> </div> Put the following script just before the closing </body> in your board wrapper. <script> $(document).ready(function(){ $("#button-tracker").click(function(){ // first we prevent the page jump that happens when you have a hashtag in your link event.preventDefault(); // now we load the good stuff $("#thread-container").load("https://kit89.jcink.net/index.php?act=UserCP&CODE=26 .tableborder > table > tbody > tr:not(:first-of-type)"); }); }); </script> Use CSS to hide the bits that you don’t want! For example: div#thread-container tr:first-child, div#thread-container tr:last-child, div#thread-container tr td:first-child, div#thread-container tr td:nth-child(3), div#thread-container tr td:nth-child(4), div#thread-container tr td:nth-child(6) { display: none } Will produce: This is how it looks on my site! I hope that this is for useful for someone! I find it very helpful for staying on top of my threads.
    2 points
  17. GDPR! A big and scary thing that has been circling and came to pass May 25th. It sounds a lot scarier than it is because of all the fines and scary talk about it and just because you are on a free host doesn't shield you from having to comply to it. This technically only applies to users in the EU however, there has already been chatter about bringing something similar to the US so it's better to be prepared then not (plus who wouldn't want to make a GDPR cake and eat it too?). So what is GDPR? It is called the "General Data Protection Regulations" and you can find out more about it here. What it does, basically, is puts in place requirements in order for users to have their privacy protected from sites that hold it. It gives users more rights in what could/should be held by an internet company, right down to the cookies. So what does that mean? Lets continue: What are the rights that GDPR provides? The right to be informed - This means that when you place a cookie on a users computer then you need to tell them that you are, including what the cookies are for. For example, when you visit the Initiative (while logged out) you will get this nifty bar: This bar links to all of the important things including our Privacy Policy (which is the important one here). When you go to this page you can see that we do set cookies on your computer but nothing that we set can identify you with. However, if you want to know exactly what we set you can visit our cookies page. With these two things you are compliant with the right to be informed. For free hosts, like Jcink, that should be setup by Jcink however if it's not we are happy to help you figure out a good way to do this. For this one, it includes things can't be auto checked (like Terms of Service or email signups on the registration page). The right to data portability - What this is, is the ability to take your information from the Initiative and take it to another site. This doesn't include posts or submitted content. Just your personal private data. The way it's explained is that it must be in a format that is importable elsewhere (like an XML file) and this is less likely to apply to roleplay users. The example that the site uses is someone getting their patient records from one doctor's office and being able to transfer it to another doctor's office. Since roleplays, in general, are not the same across the board this will only apply to their IP addresses and user account data (email, display name etc). For here at the Initiative we do allow you to request your personal information. You can do that in the Staff's Eyes Only and we provide the following: The last one and the big one for roleplays is: The right to be forgotten - This one has caused a lot of controversy because there is a debate about "what can and cannot" identify a person. The direct link here explains what GDPR believes is personal data (however these are the examples, not every possibility. I like to use myself as the example since the direct information on this is that to be "fully" removed no one can know who you are, literally fully forgotten. If someone can put it together and find the person then it is considered personal and should be removed. So, for me, if anyone can figure out my username from my posts then it means that I'm not forgotten. This can also be applied to unique character names and profiles, for example. The safest bet, even though it may ruin some stories, is to not only delete the accounts/profiles but the posts. Only do this for a GDPR specific request, as not every request for deletion will be for GDPR reasons. Another important thing to note is that when you delete a user on a site like "Jcink" it just changes the username to Guest_Username you will need to fully remove the _Username part to make it fully compliant. So the wrap up on GDPR! It's not as scary as people think but it is important to make sure that you comply with it to make sure that something bad doesn't happen because of some vindictive member. Terms of Services do not protect you from this, just because it says everything you post is forever yours doesn't mean its forever yours if it conflicts with the above. We are working on software specific guides to help you with compliance (like how to remove the auto-check for "receive emails" in MyBB. We are also looking into suggested plugins to install so that you have less to worry about as the plugin should do all or most of the work. If you have questions or concerns about GDPR, feel free to reply here and the staff will do what they can to assist. We are not lawyers so if you're super worried about it then we recommend talking to an actual lawyer.
    2 points
  18. So over the years the debate always is, should I do a dark or light theme. Some manage to think that a more medium theme is a good compromise although it isn't. High contrast themes offered in both dark and light options is optimal for not only user retention but also for getting new users in the door. In the 80s there was a study done about reading on a white background with black text and a black background with white text. The tests were overwhelmingly positive for the matter of white with black text is easier to read because of your eye dilation and it makes text clearer. Everyone seems to think that is still the same thing in this day and age. A Dark background doesn't mean "less light" with our technology as it did back in the 80s. Now, with LCDs and LEDs dark backgrounds are just as bright to the eyes as a light or white background. This also doesn't take into account degenerative eye diseases that overstimulated eyes can also be adversely affected by one version or another. With that said, it's a good move to offer not only a light version of your site (if that's your preferred) and a dark version of your site or vice versa. This gives your users the option of what feels most comfortable to them and provides them with a reason to view the site regularly without that annoying thought in the back of their head of "ugh I hate looking at this site it's too bright/dark". Of course the question is, well what if I can't make an opposite version of a theme? I don't know code! You can either request help to convert a theme from one to the other or find two themes that compliment one another that you feel will satisfy your need for an alternate theme.
    2 points
  19. Lonely/Open Threads Listing Tutorial Created By: isoldehn Tutorial Permissions: Please do not re-post this tutorial else where, instead link someone to this thread. - Additionally, you are NOT required to credit me if you use these codes on your board BUT I do wish for you to share this with those that ask about it if they ever do (share the knowledge, be kind). Tutorial Needs: Overall, the ability to copy and paste. - FTP/File Access To Web Space Step One Create the lonely threads file. Open your FTP client or file manager/file area of your web space. In your MyBB directory (usually located directly in public_html) create a new file called lonelythreads.php and insert the following code. <?php // ********************************************************* // * Listing by isoldehn 2019. * // * Free for for general public usage and change! * // * Please do not claim as your own nor charge money to * // * install this for others. * // * If any issues contact isoldehn on RPG Initiative. * // ********************************************************* define("IN_MYBB", 1); define('THIS_SCRIPT', 'lonelythreads.php'); $templatelist = "lonelythreads,lonelythreads_entry,lonelythreads_empty"; require "./global.php"; add_breadcrumb("Lonely Threads", "lonelythreads.php"); // ********************************************************* // ********************************************************* // ********************************************************* $query = $db->query(" SELECT * FROM ".TABLE_PREFIX."threads WHERE ".TABLE_PREFIX."threads.prefix IN (#) AND ".TABLE_PREFIX."threads.replies <= # AND ".TABLE_PREFIX."threads.lastpost >= ".TIME_NOW." - (# * 86400) ORDER BY lastpost DESC "); // SPECIFIED PREFIX IDS // WHERE ".TABLE_PREFIX."threads.prefix IN (#) // Please insert the pids or pid of the prefix(es) in question. These can be found by navigating to Admin CP --> Configuration --> Thread Prefixes. Click the prefix(es) in question, use the number(s) at the end of url(s). // SPECIFIED NUMBER OF REPLIES // AND ".TABLE_PREFIX."threads.replies <= # // Please insert the least amount of replies needed in order to list the thread. If you do not want a specified amount of replies then remove this AND query. // SPECIFIED LAST REPLY DATE // AND ".TABLE_PREFIX."threads.lastpost >= ".TIME_NOW." - (# * 86400) // Please insert the amount of days from the last post that the thread may be shown. 30 for example will show all threads with a post within the last 30 days. // ********************************************************* // ********************************************************* // ********************************************************* while($thread=$db->fetch_array($query)) { $thread['threadlink'] = get_thread_link($thread['tid']); $thread['lastpostlink'] = get_thread_link($thread['tid'], 0, "lastpost"); $thread['threadprefix'] = $threadprefix = ''; if($thread['prefix'] != 0) { $threadprefix = build_prefixes($thread['prefix']); if(!empty($threadprefix)) { $thread['threadprefix'] = $threadprefix['displaystyle'].' '; } } $thread['author'] = $thread['uid']; if(!$thread['username']) { if(!$thread['threadusername']) { $thread['username'] = $thread['profilelink'] = htmlspecialchars_uni($lang->guest); } else { $thread['username'] = $thread['profilelink'] = htmlspecialchars_uni($thread['threadusername']); } } else { $thread['username'] = htmlspecialchars_uni($thread['username']); $thread['profilelink'] = build_profile_link($thread['username'], $thread['uid']); } $lastpostdate = my_date('relative', $thread['lastpost']); $thread['lastpostlink'] = get_thread_link($thread['tid'], 0, "lastpost"); $lastposteruid = $thread['lastposteruid']; if(!$lastposteruid && !$thread['lastposter']) { $lastposter = htmlspecialchars_uni($lang->guest); } else { $lastposter = htmlspecialchars_uni($thread['lastposter']); } $lastpostdate = my_date('relative', $thread['lastpost']); // Don't link to guest's profiles (they have no profile). if($lastposteruid == 0) { $lastposterlink = $lastposter; } else { $lastposterlink = build_profile_link($lastposter, $lastposteruid); } eval("\$lonelythreads .= \"".$templates->get("lonelythreads_entry")."\";"); } if (!$lonelythreads) { eval("\$lonelythreads .= \"".$templates->get("lonelythreads_empty")."\";"); } eval("\$lonelythreads = \"".$templates->get("lonelythreads")."\";"); output_page($lonelythreads); ?> NOTE(S): Be sure you change all traces of # to the correct ids needed. The file contains // notes for you to follow along to. Please find the notes and edit as suggested. Step Two Create new templates for our listing. Navigate to Admin CP --> Templates & Style --> Templates --> Global Templates --> Add New Template (for each one). Template Name: lonelythreads <html> <head> <title>{$mybb->settings['bbname']} - Lonely Threads</title> {$headerinclude} </head> <body> {$header} <table width="100%" cellpadding="5px" cellspacing="0" border="0"> <tr> <td colspan="5" class="thead">Lonely Threads</td> </tr> {$lonelythreads} </table> {$footer} </body> </html> Template Name: lonelythreads_entry <tr> <td style="text-align: center; padding: 10px;" class="trow1"> {$thread['threadprefix']} </td> <td style="text-align: left;" class="trow1"> <a href="{$thread['threadlink']}"><strong>{$thread['subject']}</strong></a> <br /> by {$thread['profilelink']} </td> <td style="text-align: center;" class="trow1"> <a href="{$thread['tid']}" onclick="MyBB.whoPosted({$thread['tid']}); return false;">{$thread['replies']}</a> replies </td> <td style="text-align: center;" class="trow1"> {$thread['views']} views </td> <td style="text-align: right;" class="trow1"> {$lastpostdate} <br /> <a href="{$thread['lastpostlink']}">Last Post</a> by {$lastposterlink} </td> </tr> Template Name: lonelythreads_empty <tr> <td colspan="5" style="text-align: center; padding: 10px;" class="trow1"> Currently no threads to display. </td> </tr> Step Three Confirm your new page is working by navigating to yoursiteurl/lonelythreads.php and if it is working appropriately you should see a listing of your specifications!
    2 points
  20. As you'll note, with the character mod, everything is squished in the left column. Not particularly ideal for things that are long, like histories. So this guide is to help explain how to move it into a custom tab. For most of this you will need custom fields setup. So my personal preference, to start, is that you choose "post" and "profile separately. This way you can make a super simple adjustment and have your post related content in the left and your profile related content in it's own tab. To do this make sure you only pick one or the other in the custom field area. Then you are going to edit the profile. The template is: character > front > character > profile The first thing to find is this: {{$fields = $character->customFieldsForDisplay( 'profile' );}} Copy from that until the end of the "endif" and paste it into a notepad, you'll need it in a few. Next, change the word "profile" to "topic". You can go ahead and save and if you go and look at your character template you will see that anything that you said you wanted to show in the mini-profile is now there. Next we want to put the actual profile fields into a tab. You'll need to find this in the same template: <li> <a href="#" id="elCharacterRecentPosts" class="ipsTabs_item ipsType_center ipsTabs_activeItem" role="tab" aria-selected="true">{lang="character_recent_posts"}</a> </li> Honestly, the easiest thing to do is simply copy and paste it so their are two and then we will make alterations. First we need to change the ID so it's unique. Something like elCharacterProfile will work perfectly. Also, Change {lang="character_recent_posts"} to the word that you want this tab to be "Profile" in our case. Next you need to edit the tab that is really for the Posts. You need to remove ipsTabs_activeItem and change aria-selected="true" to aria-selected="false". This will make your new profile tab the active tab instead of Recent Posts. Last thing we need to do is actually put the content into a tab. Search and copy this part (I choose to copy this one as it's simpler to explain for our needs) for this: <div id="ipsTabs_elCharacterTabs_elCharacterOther_panel" class="ipsTabs_panel ipsAreaBackground_reset ipsPad" aria-hidden="false"> <h2 class="ipsType_sectionHead ipsSpacer_top">{lang="character_others_title"}</h2> {$table|raw} </div> Next find this: <div id="elCharacterTabs_content" class="ipsTabs_panels"> Directly below it paste what you just copied. Now we're going to replace a few things to make this work. First find the id, in this case it's "ipsTabs_elCharacterTabs_elCharacterOther_panel" we need to make it match our previously made id. So where it says: elCharacterOther we need to make this elCharacterProfile so it will end up saying "ipsTabs_elCharacterTabs_elCharacterProfile_panel" instead. You can either remove or rename the header. To remove just delete the enter h2 tag. To rename change {lang="character_others_title"} to whatever you would like at the top of your profile. Last thing to do is to replace: {$table|raw} With the code you had copied in the first step (that should be in your notepad): {{$fields = $character->customFieldsForDisplay( 'profile' );}} {{if count( $fields )}} <div class='ipsWidget ipsWidget_vertical cProfileSidebarBlock ipsBox ipsSpacer_bottom'> <h2 class='ipsWidget_title ipsType_reset'>{lang="character_custom_fields"}</h2> <div class='ipsWidget_inner ipsPad'> <ul class='ipsDataList ipsDataList_reducedSpacing cProfileFields'> {{foreach $fields as $field}} {{if !empty( $field['value'] )}} <li class='ipsDataItem ipsType_break'> <span class='ipsDataItem_generic ipsDataItem_size3 ipsType_break'><strong>{$field['title']}</strong></span> <div class='ipsDataItem_generic'><div class='ipsType_break ipsContained'>{$field['value']|raw}</div></div> </li> {{endif}} {{endforeach}} </ul> </div> </div> {{endif}} Click Save and go view your profile. It should now have a tab with all of the profile fields displayed. Enjoy!
    2 points
  21. There are a few things that I've seen people do, which undermines their attempt at promoting their site. This quick and dirty guide will (hopefully!) prevent you from shooting yourself in the foot. Don't change the colour of text. Changing the colour of your advertising text can make your ad illegible. Some sites have two versions of the same theme, one dark, one light. If you're looking at the dark theme and change the colour of the text to something bright, you're ensuring that your ad can not be read by anyone using the light version. In addition, you simply can not guarantee that the colour you selected will be legible in the future. This is particularly pertinent to roleplay directories and your signature on them. Do yourself a favour, just leave the text colour alone. Text size. Be mindful of user experience when selecting your text size. Obnoxiously large text in your signature is not eye catching, it's annoying. It's also a good way to ensure that people either turn off signatures when browsing a site, or turn off your signature. You additionally don't want to make your text smaller than the default. First off, if the font size changes it can make the font even smaller and secondly if people can't read it they won't read it. Doesn't matter how large your text is, if everyone's elected to just hide it. Image size. In megabytes, not pixels. If your image contains several megabytes worth of data, you're ensuring that those with slower internet will not see it because chances are, they're not waiting for it to load. It's awfully nice to have a high quality image, but it's no good if it takes an age to load. Decrease the quality a little. Condense the image a bit. Animations. Be wary of flashing animations. Just like text size, if your gif is obnoxiously distracting, it'll be blocked or the user's having bright lights inflicted on them will develop a grudge against your site. Be classy about it! That's it! The quick and dirty guide to formatting in your ads.
    2 points
  22. Let's talk about The Initiative's play-by directory! For this guide, we'll go over how to use it, and how to contribute to it, because we love contributions, as well as some things to keep in mind when adding play-bys, and a couple questions that may come to mind when thinking to help with it. We're nearing 500 play-bys in it at the time of writing this, so it is a very useful tool in PB hunting, but it could be a bit overwhelming or intimidating. You'll probably need a lot of patience to add to it, it's not actually quite as easy as some of us make it seem to be (you know, dropping over a hundred PBs in a day is actually very difficult…), but it can also be a lot of fun! We've also got some neat features that can make finding what you're looking for a lot easier. So, let's dive in, starting with how to use the PB directory. You can find the PB directory under RPG Resources in the navigation bar. Viewing PB Entries When you first poke into the play-by directory, you'll see a bunch of faces. Each one's got a main image, the big one you see first, their name, and some options and descriptors, and finally, more example images. The options and descriptors are for the filters, so if you tick 'female,' you'll only get the PBs that are marked as female. More on that later. When you click a name, it'll take you to the main PB listing page. This mostly is just a larger version of what's available on the directory listing, except there's a section at the bottom called Familial Relationships. This section holds main images, names, and links, to other PBs that can be used for family to a character that uses this PB. At the moment, these are primarily other celebrities that the given celebrity is related to in real-life, but any celebrity that looks a lot like another can be marked as a familial relationship suggestion to that other celebrity. These can be super helpful for creating character families that are blood-related, so be sure to check these out if you need siblings or such. Directory Filters To the right hand side of the main directory listings is a side-bar. This side-bar has a bunch of check boxes and options. Tick these in any combination you like in order to get a narrowed down search, based on traits, styles, and appearance, that match what you have in mind for your character. You can also save these filters, by ticking the Remember filters box before the Update button at the bottom. Note, there is no ethnicity filter, it is based on generalised, occasionally variant skin tones. This is meant to help peeps broaden their horizons a bit, without being obnoxious about it. You'll probably find someone in there you like, no problem, it just may take a bit to do so. There's a huge range of skin tones and hair colours and ethnicities in our play-by directory (we're super proud of it, can you tell?), so there's bound to be someone in there that matches what you're looking for - and who knows, maybe you'll come across someone that doesn't match what you're looking for right now, but inspire a new idea for later. Name Search At the very top of the filter side-bar is a name search. This field was put in because I am a lazy brat, but it will search only the play-bys for a specific name. You can input 'smith' and get all the Smith siblings (Daisy, Starlie, Lucky, and Pyper), and the Smith family (Will, Jada, Willow, and Jaden). If you're looking to add to the play-by directory, this function will come in handy (do a quick search to be sure the PB you want to add isn't already in there - while there is a public listing, we highly recommend searching by name anyway, because sometimes, names get missed). You could also use this function to quickly find someone's entry, and see if x style/hair colour/whatever has been added, or to confirm to yourself if they did x thing. Adding a New PB So, you've gone through our listings, done a name search, and a few of the PBs you use aren't in there. You want to add them. That's great! We thank you very much! First, toward the top of the main listing is a big green Add new playby button. Click this to get started! Now, the first field is name. Check this for typos, make sure you spell it right. Typos make us sad pandas and lead to accidental double entries. If your chosen person uses multiple names, please ensure that the primary name that is listed first for them is their real life name, with their more well-known name in parentheses. For instance, with Misha Collins, his real name is Dmitri Krushnic, so he is listed under Dmitri Krushnic (Misha Collins). For those that have a shortening or a middle name they use, we put it in the middle, so in the case of Ellie Goulding, she is listed under Elena (Ellie) Goulding. The first image at the top is the main, the one that shows on the main directory in large. Please be sure this is a decent quality image, around 600 in height and width is a good choice. A little smaller can work, but we want these clear and easy to see. Ideally, they'd focus on the celebrity's most common appearance, or be a good shot of their face. Now, the rest of the entry page is all tick boxes. You can mark more than one in each category, so if you have a celebrity that's male but very androgynous, ticking male and androgynous is okay. If you have images of them in a cowboy hat and also in biker garb, you can tick both southern/cowboy and rebel. Adding to an Existing PB Say you come across a PB that's already in the directory, but they did something new, like a historical film or something, and you want to add images from that, or maybe you have images from some obscure sci-fi flick they did a long time ago. Go ahead and edit it, tick the appropriate box(es), and add the new images. All we ask on this is that the new images add something to the listing. Ergo, if her days as Morticia Addams wasn't in Anjelica Huston's entry, someone else could certainly come along and add some images from The Addams Family era. If someone manages to find pictures of a celebrity when they were younger, it's also absolutely acceptable to add those images and mark a younger age. The PB directory is collaborative; no one person owns any given entry, and it is a community effort to keep these entries up to date, and as robust as they are. Don't be afraid to add new ones, or add on to existing ones! We also greatly encourage adding family suggestions to existing PBs! If you're using Jason Momoa as a brother to someone else, mark it! Please don't take any familial suggestions out, however; this is really kind of subjective, I've been mistaken for a sibling of people I look nothing like before, and maybe they look related to someone else, but not to you. Quite frankly, the Smith siblings look nothing alike to me, but I'm sure they look alike to someone. This is par for the course, so we're just going to leave those in once they're in. Things to Know / FAQ What constitutes a celebrity? Were they in a movie/TV show, on a fashion show cat-walk, signed to a modelling agency (IMG, Next, etc), did they create music/sign to a record label, or do they have over 10,000 subscribers on a social media account? There you have a celebrity. We do not condone placing PBs in the directory that are not intentionally celebrities. General rule of thumb for these, check if they have an IMDB entry. If not, find their Instagram or YouTube; is it over 10,000 subs? Go for it. Please do not add models from small-time modelling sites where little teenagers try to make it big, but aren't big yet. They get kind of annoyed about that. DeviantArt stock models are okay, as well, those images are meant to be used by others. Tags and filter markers versus example images: One thing to remember about the tags and what they're for is to ensure that for each box you tick, you have an example image that matches. For example, if all you have are images of Kate Winslet with her hair blonde, don't tick the red hair colour box. Even though we know she's had her hair red, we need at least one image of that. Don't worry, the PB directory is intended to be collaborative. This means, whatever you miss, someone else can come along and add later. Skin tone: This one or that one? If your chosen entry can be between this tone and this one, as in you can't tell which they are, aren't sure, or their images have a wide variation of skin tone based upon lighting and post-processing (that Photoshop thang they do to models all the time), tick the two they can fall into. Yes, both. Skin tone is somewhat subjective, albeit we do have a skin tone guide in the information page, to use as a basis, and can change drastically depending on variant factors, so it's okay if they don't fall neatly into one or the other. Hair Lengths? Different people can look at someone's hair and feel differently about the length of it, I get it. For continuity's sake the basis we've been using is 'short' is anything more than 2-3 inches above shoulder length; 'medium' is within a few inches of shoulder length, and 'long' is anything longer than that. The play-by directory is NOT an image gallery! A marked trend is to drop essentially all the images anyone can find for a PB, or images edited for a specific character or a graphics image. This is not the PB directory's intended usage. It is not a gallery. It is a deliberate selection of images that showcases a PB's varying looks, styles, hair colours and styles, and the overall versatility of a given celebrity. For instance, Alyssa Milano has had her hair relatively long, and fairly short, so we wanted to choose images for her that show both these looks. In some of her images, she also wears glasses, so we wanted at least one of those. When selecting example images for the PB directory, be sure that each image chosen showcases a different appearance or style. We don't need all the images from a single photoshoot; we just need to see the different types of personality they can convey. It is recommended to get fairly decent resolution images (around 4-600 pixels at minimum), but they don't necessarily need to be stellar for creating avatar and signature sets from; they're just examples. So, toss the red carpet and speaker panel images up if they're useful examples of a given style. Is the PB directory only real-life? Yes. Unfortunately, allowing animated/CG play-bys in the directory causes some legality issues, and also kind of turns the PB directory into more of an art gallery, which isn't what we're looking to do here. If you need help with animated/CG PBs, there are galleries online for that (be careful, however, I've found my art on some of them, and no one asked permission to put my art there). Obligatory dad joke: two guys walk into a bar, the third one ducks. That's all, folks! Happy PB hunting and contributing!
    2 points
  23. THE MOUSIE GUIDE TO Writing a Quick-Start Guide How do you help potential new members navigate your site when you (and your staff) are not around? Perhaps your site has an unusual application process, lots of information available, or perhaps new members just seem to get inexplicably lost as they find their way around for the first time. The answer: A quick-start guide! WHAT IS IT? A Quick-Start guide is essentially an index, or a pathway, of everything new members need to know in order to set themselves up to play. It's usually a short document that ties together any topic prospective members need to read, and actions they need to take, to get OOC accounts sorted (if applicable) and character accounts applied. It may also go further and provide the member with tasks they can do after approval, to avoid that "I'm a member, now what do I do?" moment. So how do you write one? Let's start from the start. STEP ONE Make a list! Start by listing all of the actions a member needs to complete from registering their first account, to applying their first character. Include any topics that they should read along the way (or topics/forums that would be super helpful). Your list may look a little something like: Read the rules Read the plot Register an OOC account Get your OOC account sorted Read what character types we have Have a look at wanted ads/needed characters Register character account Fill out the profile Post the application Link your subaccounts Look at open threads Start an open thread Create a plotting thread Join the Discord This is a very basic list that might be used for a board that has both player and character accounts. You can see how it creates a logical pathway from reading those first important documentations, to getting involved, all in the rough order you would expect it to happen. STEP TWO Divide it up! Take a look at your list and see if you can start to spot sections. You might have "Getting your OOC Account", "Character Development & Registration" and "Once You're Sorted". Think about the stages that members are in as they work through this list, and then add them in as headings. GETTING YOUR OOC ACCOUNT Read the rules Read the plot Register an OOC account Get your OOC account sorted CHARACTER DEVELOPMENT & REGISTRATION Read what character types we have Have a look at wanted ads/needed characters Register character account Fill out the profile Post the application ONCE YOU'RE SORTED Link your subaccounts Look at open threads Start an open thread Create a plotting thread Join the Discord What these sub-headings do is help prospective members see where they are at a glance, rather than having a huge list of tasks to read down. It also breaks up the list a bit and makes it easier to follow. Sub-headings are great! Use them wherever you can. STEP THREE Write it up! Using these bullet points, write a very short introduction to the link, and then post the link to where the prospective member needs to go. Don't fall into the trap of putting too much information in your Quick-Start guide, let the posts you link to do the heavy lifting. This is just an index, so try to keep your points to a sentence---two at most. Remember, you can also use a direct link to the registration page, and also to the user settings (for custom-field based applications). You want this to be short, sweet, and direct focus to the links---and make sure that your links stand out as links! If your CSS has link colour very similar to the text colour, you may want to look into changing that, or using a bit of styling in the post to make sure people know it's a link. Below I've used bold text and red to note the links (they aren't links in the example, however). GETTING YOUR OOC ACCOUNT Check out our Rules Check out our Plot Register an OOC account using the name you'd like us to know you by Post in Introductions to get your OOC account sorted. Welcome! CHARACTER DEVELOPMENT & REGISTRATION See what character types we accept Need inspiration? Have a look at our Adoptables forum for ideas! Want more information about our setting? This forum has additional setting information. Fill out the profile. You may want to keep it in a word processor while you work on it! Post the profile in our applications forum. Hold tight! Our staff will review your application within 24hrs. ONCE YOU'RE SORTED Link your OOC and IC accounts -- this guide shows you how! Check out the list of open threads! Start an open thread of your own and post it to the list! Create a plotting thread to introduce your character to the community Join our Discord for more chatting and crazy plot ideas! You can see where I've re-worded some parts to more casual phrasing. "Read X, then read Y" can be abrupt, and destroy the tone of your documentation... but it's essentially what you're saying. I also added a couple of points, because... it doesn't matter how good your initial list is, you'll always think of something more while you're re-writing! STEP FOUR Style it up! You're basically done, but this is where you would add in your own header styles and other things that make it really fit in with the board visually. SO THERE IT IS Your awesome Quick-Start guide! Congratulations! I'd love to see what amazing guides this documentation helps to create!
    2 points
  24. DON'T PANIC Let's face it. Running a roleplay is hard. Getting a new RP off the floor, whether it's your first, fifth, or forty-fifth is always going to be a struggle. The only difference is the matter of experience you have, and how you react to the bumps along the way. This documentation is here to reassure you of the reality of running a roleplay, and hopefully - to help you not give up when the going gets tough! THE TRUTH ABOUT ACTIVITY & MEMBERS There's a great misconception that more activity equals more success. It's just not true. A successful board is measured by the fun members are having, not by any number of members, posts or threads you have. My board is a week old, and so far we only have ten members. It must be failing. No, it's not. Relax. Boards take some time to get off the ground, it takes much longer than a week for you to get the word out. Many boards take three to four months to establish a normal routine. Don't be put off by that - just keep trucking. The trick is to keep playing yourself, find some members you can thread with and enjoy yourself. Guests are more likely to join boards where it looks like people are already having fun. So get in there, and make some awesome! I've posted adverts everywhere and still I'm getting no members. It must be my skin. Have a look around at other successful boards. While people are largely attracted to boards that are pretty, the majority of highly successful websites are actually not all that flashy. People will join sites that appeal to them, regardless of looks. It is always worth considering readability and load times - but it's nothing to be obsessed over. If you're truly worried about how your board looks, ask for a proper analysis before you give up. You might find out some interesting facts on how others see your forum. If I change x, that will be sure to get people here and posting more often! If there's one golden rule about administration, it's that you do not change anything you're not comfortable with changing. It's perfectly fine to grow your board, and incorporate features that members will like and appreciate, but be careful of how far you go to pander to your members. If you don't like it, don't do it - there will be people out there who appreciate the way you wish to run your board, and those are the members that will best see the visions you have for your roleplay. The minute you start creating a board that you don't believe in, the fun is sucked out - and it becomes a chore. Always keep your board true to your own visions, it's yours for a reason. My genre is too narrow - I can't advertise anywhere and my board is doomed to fail! False. General rule of the internet states that if you've thought of it, someone else wants it. If your genre/idea is so unique that it's hard to find a market for it - then it is your duty to shove your board under as many noses as possible until it gains the fanbase it deserves. Unique isn't a disability, it's an opportunity. If you believe in it, stick with it until you are genuinely bored with the idea. Don't give up because you think no one else is interested. I have advertised everywhere and still no members. This is the end. Only if you say it is. When someone says they've advertised everywhere, that's a big call. The internet is a big place, and (though it came as a shock to me) there's more than just RPG Initiative out there. It's incredibly important these days to be listed with search engines, find absolutely any directory you can, frequent the forums of your hosting provider, your software provider, get your friends, advertise on guest friendly forums of all softwares, use plugboards, yahoo groups, livejournal, heck -- make business cards and drop them in random places. If you believe, then believe it's not over. People suddenly stopped posting. I guess that's it, right? Not at all. Real life gets in the way frequently, and as anyone who has run a forum for more than a year or so will tell you, inactive periods come and go. Be conscious of exams and holidays across the world, know your audience and expect things to drag during those times. Keep in contact with your members via bulk email, let them know you're still out there and active, if it remains quiet - change things up a bit. A new skin, a new plot line, generate new interest in the board. Never take an inactive spell as a reason to close, unless (and here's the key line) you want it to. THE TRUTH ABOUT YOUR ROLEPLAY As admins, we're overly conscious about how our roleplay presents to guests and members. If there's any big message that this documentation should give, it's that what you want and what you're comfortable with is perfectly okay - but just in case you wanted it all in dot points... I should have created my roleplay on Jcink/other popular host. Then it would be popular. Hush your mouth. Jcink, while it is a fine and respectable host, is not the be all and end all of roleplay. Being on Jcink doesn't automatically make your roleplay more appealing. Like any other "physical" aspect, it is something that members can and will adjust to if they're truly interested in your game. If you're more comfortable with Proboards, stick with Proboards. If you're curious about phpBB3, SMF or anything else -- go with it! There are tonnes of successful roleplays out there on all softwares, you're guaranteed not to be alone. Never make the mistake of taking your possible membership too much into account. Too many administrators find themselves in situations they don't like that way, and at the end of the day -- members only need to be able to post to play. For all forum softwares, posting is a pretty straightforward business. So go with whatever you like. I didn't hire enough staff when I opened. That's why my board is failing. Staffing is a funny thing in boards. There seems to be a misconception that a full team is needed before a board can open is completely false. Some boards open very successfully with just one, or two staffers present. If you don't have a lot of time on your hands but are dedicated to your idea, definitely - go and find some trusted friends to help out. But a board that is crying for staff will undoubtedly be a busy one, and the best thing about busy boards is that they have a whole lot of potential staff members. Employment topics are great, but ultimately - take from your dedicated members. They're the best and most likely to stick around. I'm the administrator. I'm not allowed to relax with my members. Baha! Get over yourself. Seriously. Administrators and moderators are there to have fun just as much as the members are. Ice Administration died out in 2006 (I hope) and it's pretty well known now that a friendly atmosphere and open staff is the best way to help your members feel comfortable on the board. Get in there, and tear it up with the kids. That's why you made the place, right? To have fun? So go ahead and DO it! I'm not good at graphics and I can't skin. My board is doomed. Still with the obsessing over appearance? The best thing about the roleplay world right now is that you don't need to be good at any of that. With the amount of skins available, and the talented graphics artists around... all you need is an idea. Exercise your creativity, write to your hearts content and find the pretty that you need here. You don't need to make all of it. It certainly doesn't doom your board. THE TRUTH ABOUT THE WAY YOU PLAY It's almost sad how roleplay has become so standardised these days, with most boards doing it much the same way. Makes it pretty hard to feel comfortable with the way you choose to run your board. At the end of the day, how you want to play is perfectly fine - and you will find other people who feel the same way. I don't like play-bys. I think that's why no one's joining. If you don't like play-bys, there will be members out there who don't like, or aren't bothered by not having play-bys. Trust in the way you prefer to do things, and as I said above - don't let what you think people want sway you from what you feel comfortable with. I went with account per player, should I have gone per character? Only if that's what you wanted to do. Same as above. A lot of people prefer to be on account per player for one reason or another, and as always - people will adapt if they're interested enough in the concept your pushing. Just keep pushing it, raise awareness of the way you play here on RPG-D, educate people. There's no right or wrong way to play, so help other people understand the way you do things. You never know, they might just be curious enough to try it. I've been out of the game too long. I'm too oldschool. No one will be interested in anything I have to advertise. Pshaw. Retro is a fad. And just like 3D divs and full image maintitles - it's coming back. It's like with anything in roleplay, there are always people looking for their specific 'preferred' way to play. Some of us are oldschool, and some of us prefer the more modern style with all the new-fangled gadgets. Some of us like a mix of both. If you think something is great, make it your goal to bring it back! I like wordcounts. Is that bad? Is that why no one is joining? You have the right to stipulate any wordcount you like. This is one of those cases where I will advise that you be aware of what's realistic to expect people to type every single time, and that you be aware of how you plan on dealing with members who don't meet your requirements - but it has never been said that wordcounts are wrong. Some people thrive with them, some people struggle. Some people struggle without them. Just be careful when you start combining your 500+ wordcount with the title 'advanced', as quantity and quality are two separate things. THE TRUTH ABOUT GIVING UP So when is a board dead? When should you just cut your losses and let it go? It's a question we all face, and if you haven't come across it yet - then you're yet to pass the last test in becoming a fully qualified administrator. It's that moment where everything seems hopeless that most people turn back, close their boards and find greener pastures. But there's hope. We had a good run, but when it's over - it's over. It's not over until you say it's over. If you've had a good run, you can continue having a good run - so long as you stick with what you've created. So long as you keep that interest in it personally, it will remain interesting to other people. Yes, it's going to be hard to keep pushing something when it's dragging, when no one seems to be joining and when your board - for all intents and purposes - looks dead as a doornail. But you can bring it back, with the right amount of love and dedication. It's only over when you give up, and that's the truth. There are too many other boards of this type. We can't possibly win. Yes. You can. Writing as an administrator who opened a forum in a highly popular fandom, with a twist that gave it a lot of competition - both canon and non canon - I can tell you all about that dilemma. In my time, I've seen five or six Australian magical schools - but what is the one that everyone knows? It's mine. Why? Because I refused to be intimidated by other people's boards, and continued to push my board as something that other people would want to be a part of. You can be a success in any genre you choose, with two highly important factors. One is the drive to push when it gets hard, and the other is a love and belief in the type of roleplay you run. While some genres might be easier to dominate, if the love's not there - it's pointless. I don't have what it takes to be an admin. I'm too... Whatever you are, you have it. There are all types of admins out there. Some are relaxed and laid back, some are in control of absolutely everything - and all can run successful boards. The only trick is to not let anything get in the way of the fun. If you're not having fun, then you're doing it wrong. So relax, and let your own personal style shine through - people will respect you for it more, than if you try to pretend to be someone else for the sake of how you think an admin should behave. It's not fun anymore. This is the end. Now you're getting it! If it's not fun, if you've stopped believing, that's when it's dead. Sometimes it happens, sometimes the ideas we initially love aren't as good as we thought, sometimes things just change. Never let go if you still believe, but if you don't - it's time to move on. Never dump an active board, though - always have the consideration to leave it in the hands of someone who can look after your members. Just because you've lost interest doesn't mean your members haven't. But you don't have to chain yourself to a board you don't enjoy. Relax. Set yourself free, you can always come back later. I hope this has helped someone, every day we see more and more administrators drop promising boards for small and saddening reasons. The moral of the story, and repeated several times throughout is that there's always hope for admins who believe in the roleplays they create. It's only when you don't want to be involved anymore that your roleplay truly dies for you. So have hope, and keep on with it! There's nothing as rewarding as running a roleplay that people love, except perhaps having children. I hear that's pretty awesome. And Nandos. Until next time, keep writing!
    2 points
  25. Every site owner will invariably encounter a situation where a member (or guest that happens upon your site) will take your work and start their own site with it. So with that in mind, here is what to do about it. I've heard people say they'd be flattered. But in truth most people who say that have likely never actually had it happen to them. And having been on sites that were ripped off, you don't feel flattered when it happens... you feel angry, insulted, sad, violated and annoyed (but not flattered). 1- Determination Before you even consider accusing someone of theft, you absolutely need to make sure theft actually occurred. There are some things that cannot be classified as theft and attempting to report on these are exercises in futility. (No host is going to ever take action on them, you might as well save your time/energy.) Those things are: * Ideas * Public domain images * Segments of code (a line or two of Javascript that does something neat can't be copyrighted. But a 75 line one that affects multiple specific parts of your site? Little bit of a different story.) * Generic names (so if your character is named Bob, submitting a claim on the name Bob will get you ignored.) * Derivative works (If you are a canon based roleplay and elements of canon material get taken, thus you are not the copyright holder, there is nothing you can actually do. Even if what was taken was in your writing. You still don't own it and can't make any claims on it.) For skins, check the source code to see whether they used your exact skin (like it has: your credits in the CSS, lines that you included, links to your images or etc... ) or it's just very similar. Remember that even if a skin looks similar it does not mean it was copied. For example skins using black are pretty common. So you might see #000 (Black) and #A60000 (Red) used because those are common colours. You need to actually verify they've copied before making any sorts of accusations or claims. Otherwise it looks really bad for you (especially if you make accusations publicly, which is generally a bad idea) and generally will get your claim ignored. 2- Document evidence After you have determined that you have been stolen from, the next thing to do is grab screenshots of everything. (This is to provide proof later on.) If you want to show exact comparison, open a tab with your site then open a new window and tab with the copycat and arrange the two windows to show both sites at once. Then take a screenshot of them both together. (Try to show the dates if possible so they can see that your content was posted first.) Next grab all the links and store them in a text document. Make sure to clearly label what each link is and why it's included. (This will help later in case that site goes into lockdown mode, bans you or simply moves the topic to a section you can't see.) If they stole your CSS, having a screenshot showing side by side "view source" (to show how identical your coding is) is good. And likely the only thing you'll really need. 3- Confront Then after the evidence gathering phase, you need to contact that admin/owner of the site that has copied (privately of course) and try to reason with them. Ask them to remove anything that doesn't belong. (I recommend against just asking for credit since that sends the message that what they did was ok.) Please do not skip this step and go right into the "Escalation" aspect (mentioned below). Most hosts will ask you if you've contacted that site to attempt resolution on your own. If you haven't they may well direct you to attempt that first. And they may not actually take action themselves (even if a proper DMCA and/or ToS report has been filed) unless the site in question has already refused to co-operate with you. WARNING - never threaten or warn a site that you'll pursue further actions against them (like DMCA or ToS reporting) since that may cause them to go into lockdown mode. (Where guest access is restricted, they may hide or modify things to cloak their thievery and most assuredly you'll find yourself banned.) A good sample message you can send would be: 4- Response At this point any action they take is considered a response. Even if they don't respond at all... if they state they will remove the stolen content, thank them for their time and understanding in this matter. However make sure to document your correspondence with them (just in case). And follow the steps under "Co-operation". If they: don't reply within a week, reply claiming innocence or that they did nothing wrong, or after a week have yet to remove the stolen content; then proceed to the steps marked under "Escalation". 4A- Co-operation After they've stated they would remove content watch them for a week to see if they actually did remove your work. (Some sites will tell you they'll remove your work just to get you to go away. Though they have no intention of doing anything. If this happens, go the steps listed in "Escalation".) However if they do remove your work then check back after two weeks and 4 weeks to see if they have kept it off (and not just removed it temporarily to satisfy you). If they have kept if off for a full month then they probably won't reuse it. Though if at any time (during the month) they restore content that was stolen from you... go right to the "Escalation" stage as at this point they have been warned, they know exactly what they're doing and have no desire to listen. 4B- Escalation If they refuse to listen or co-operate... Then take it to the next level and submit a DMCA report to their host (you may need to do a WHOIS to get that info). Be certain to include very specific details about what is copied and from where. (So if they copy your rules word for word then include the links to their rules and your rules.) Include every link, screenshot and conversation with the site owner you can for proof. This will authorize the host to remove any content which doesn't belong to the copycat. Or if the DMCA report is severe enough (like enough info was copied) they may elect simply to terminate the user's site/contract without refund. Though this should be a last ditch effort if they won't remove it on their own. Like stated in the contact section of this article, do not attempt to jump directly to this step. Most hosts will not act unless all other avenues have been attempted. Additionally be aware that filing false DMCA requests is a serious matter and should you be caught you could be held liable for civil misconduct. (Hence the reasoning for requiring all the evidence.)
    2 points
  26. Hello and welcome to the Initiative! We are here to help you RP! From talking about roleplay to advertising your site to helping you find the right Faceclaim/Playby for your character, guides and more! We are here to help and we know that a new site with new people can get overwhelming so we're happy to show you around. To start off your journey we'd like to make sure that you're comfortable with our layout! We offer both a dark and light layout. You can choose which version you like by doing the following: Look in the top right (near your username is) Click the the image that looks like this The site will reload to the light theme! Click it again to switch back. The other thing you can change is the forum (general site) layout from the grid format to a traditional list view. To do this go to the main forum page. At the top next to the "Start a new topic" button there are three buttons: - this button will switch the layout to the traditional forum list. - this button is default and will provide you with the grid layout. - thus button is the fluid view. This means that all topics will be listed, rather than you having to visit each forum. You can filter what forum topics you see by clicking on the relevant forums on the right hand side. Click on the forums you want to see! Now lets complete the profile! You can also follow this awesome tutorial it explains how to complete your profile. All settled? Now lets get you integrated into the community! We recommend taking a few moments and introduce yourself. Not sure what to say? That's okay! We offer up some questions for you to fill out in case you are stumped! Now you will have welcomes from members around the site! Want to join our discord community? The easiest way for you to do this is through the Discord integration. To do this: Go to your account settings. Click on discord account. Click on link your discord account. Approve everything and you're good to go! Not comfortable with linking your account to your discord? No worries! Click on the discord icon in the footer. Go the name change channel and post there with a link to your account. Wait for a staff member to change your role, granting you the ability to post in the other channels. It's a lot easier on all if you use the discord integration tool. This link does not give us or anyone else any extra information about your account, any additional access to your discord account, or any additional control over your discord account. Nor are you revoking any control or privacy that you would normally have. Next up, do you want to give us some of your insight or maybe you'd rather just confess some awesome roleplay stuff with us? Head on over to the Chat & Discussion or the RPG Confessions and tell us! Are you here to add your site to the directory? Awesome! Once you have posted around the site and earned 10 content items (this includes gallery images, guides, playbys/faceclaims, posting in the wanted section and more!) you are able to go post in our intuitive directory. In here you will be able to choose how people can find your site with the ease of filters. The filters themselves help other members find sites that they may never have considered in the past as being part of what they were looking for! It helps give all sites a lot more exposure as we don't hide the sites behind categories! We hope this helped you and that you are feeling confident about being a part of this site! We love that you're here! If you're looking how to change other site specific items, like notifications, then check out our other "Initiative Guides" here. If you have other questions feel free to ask in the Ask Us forum or Staff Contact Center we'll be happy to help you!
    2 points
  27. So on a large scale many people misconstrue what a Sociopath and a Psychopath are. This misconception of them is often derived from the fact that many psychopaths exhibit sociopathic traits however not all sociopaths are psychopaths. Lets start with defining the terms Sociopath - a person with a personality disorder manifesting itself in extreme antisocial attitudes and behavior and a lack of conscience Psychopath - a person suffering from chronic mental disorder with abnormal or violent social behavior Sociopaths Now the part that it seems gets confusing is the last part that describes a sociopath "lack of conscience". This isn't to say that a Sociopath will walk out of their house and just kill someone this just means that their moral compass doesn't necessarily point North. In fact, many sociopaths know the difference between right and wrong and a majority of them will adhere to it as it is socially acceptable. On the flip side, sociopaths are more rational than emotional. That means that if the choice is between a dog that "might" die and a child that "will" die they may choose the dog over the child because rationally it makes better sense to give the possibility over the sure thing. Additionally, sociopaths are more likely to feel empathetic toward animals than toward humans (re: antisocial behavior). Now, many people mistake the lack of empathy for no feelings whatsoever. Sociopaths have feelings, just like the rest of us, they just don't interpret their feelings in the ways that someone that is not a sociopath interprets that data. For the most part a sociopath will feel little to no empathy toward humans or their empathy will be misdirected. I have a quote from a diagnosed Sociopathic friend (at least I call them a friend) that told me the following: This person loves dogs and has a really connection with them where they don't have this same connection with other people. Many sociopaths are relatively well adjusted. They take social cues decently well and are able to blend in. Many sociopaths that you see in media are the exact definition of "antisocial" and often the reason that it's blurred into the next subject. Psychopaths Ah... psychopaths! The overused term for the wrong type of character. Many people believe that the above description is actually a psychopath however psychopaths are their own demon by themselves. First and foremost you do not have to be a sociopath to be a psychopath however many serial killers are both. Additionally, and most importantly, not all sociopaths are psychopaths. A good way to remember the difference between the two is that Psychopaths want to hurt people, sociopaths do not. Psychopaths are aggressive beings, this is unlike the sociopath who is anti-social and for the most part uncaring. These are often the people that are portrayed in movies to kill small animals while they are young. Psychopaths are extremely suave, intelligent and blend in very well with others. It is rumored that a lot of psychopaths are as such because they are so smart but that is a speculation. Psychopaths can have other mental disorders that confuse the person and make them more radical than others (in opposition to the suave and intelligent statement I said early). This can manifest in many ways and many other mental disorders, that are also confused with psychopathy, including schizophrenia manic disorder and more. Overall, psychopaths are misrepresented because they are confused with many other mental disorders that are often blurred in media and other avenues. Psychopaths are very specific and should not be confused with sociopaths.
    2 points
  28. One of the things that can prevent people from joining your site is the level of contrast that is between the text and the background. Low contrast sites are unintelligible for some and difficult to use for others. There is no reason not to have good contrast on your site, surely you want people to be able to read the text? Thankfully, you don’t need to make any guesses as to whether or not your site has enough contrast! Accessible Colors is a useful tool that provides a contrast checker that will tell you whether or not the colour combination has sufficient contrast. When using the website, be sure to input the foreground (text) colour, the background colour and the font size. Larger text needs less contrast to be legible! Accessible Colors will analyse the colours and font size chosen to ensure that it meets W3C's web accessibility guidelines. W3C develops guidelines with an aim to remove barriers that creep into web designs. Depending on what software you use for your roleplay site (and your own know how), it can be difficult to fully meet their guidelines. Ensuring good contrast is however, an easy guideline to meet and will help to ensure that as many people as possible are able to use your site.
    1 point
  29. For this guide I'm not going to go super in depth into the how-to to get like our special gears per user group however we will explain the minimum of how to add in a group ID so that you can start to make custom items in your author pane. This won't be super in depth on how to do extra things but they are possible. This does require theme edits to accomplish: So first things first go to edit your theme, I always recommend to edit a test theme to be sure you don't break anything while users are using it. To do this go to Themes > Themes > Click the < / > icon to the right of the theme in question. You'll need to find the postContainer template. It's in forums > front > topics > postContainer In this template you need to find this line: <article {{if $comment->author()->hasHighlightedReplies()}}data-memberGroup="{$comment->author()->member_group_id}" {{endif}} id='elComment_{$comment->$idField}' class='cPost ipsBox {{if $otherClasses}}{$otherClasses}{{endif}} ipsComment {{if ( settings.reputation_enabled and settings.reputation_highlight and $comment->reactionCount() >= settings.reputation_highlight ) OR $comment->isFeatured()}}ipsComment_popular{{endif}} ipsComment_parent ipsClearfix ipsClear ipsColumns ipsColumns_noSpacing ipsColumns_collapsePhone {{if $comment->author()->hasHighlightedReplies()}}ipsComment_highlighted{{endif}} {{if $comment->isIgnored()}}ipsHide{{endif}} {{if $comment->hidden() OR $item->hidden() === -2}}ipsModerated{{endif}}'> And replace it with this: <article {{if $comment->author()->hasHighlightedReplies()}}data-memberGroup="{$comment->author()->member_group_id}" {{endif}} id='elComment_{$comment->$idField}' class='cPost ipsBox group_{$comment->author()->member_group_id} {{if $otherClasses}}{$otherClasses}{{endif}} ipsComment {{if ( settings.reputation_enabled and settings.reputation_highlight and $comment->reactionCount() >= settings.reputation_highlight ) OR $comment->isFeatured()}}ipsComment_popular{{endif}} ipsComment_parent ipsClearfix ipsClear ipsColumns ipsColumns_noSpacing ipsColumns_collapsePhone {{if $comment->author()->hasHighlightedReplies()}}ipsComment_highlighted{{endif}}{{if $comment->isIgnored()}}ipsHide{{endif}} {{if $comment->hidden() OR $item->hidden() === -2}}ipsModerated{{endif}}'> Note, that the only thing I actually added was this: group_{$comment->author()->member_group_id} What this provides to you is a styling class that identifies the group in question. You can find group IDs in the Members > Groups page by either hovering over the group, editing the group and copying the URL into a text editor or by using your handy dandy inspect element tool. From here make changes to elements to your hearts content. As a quick and added bonus. The way that the Initiative accomplishes it's borders is by adding a class to it's our bit for the avatar. Find this: <li class='cAuthorPane_photo'> Change to this: <li class='cAuthorPane_photo group_{$comment->author()->member_group_id}'> And using CSS like this: .cAuthorPane { width: 300px; } .cAuthorPane_photo { width: 265px; height: 265px; display: flex; align-items: center; justify-content:center; background-size: cover; } .cAuthorPane_photo.group_4 { background: url({resource="new_av_bg.png" app="core" location="front"}) center center no-repeat; background-size: cover; } Please note that the authorPane changes do require other moderate changes to make them both responsive and to not overlap your post.
    1 point
  30. First, set up the custom profile fields. My set up is this: Field Name: Rotating Avatar One Key: rotate1 Description: Want a rotating avatar? Upload your first image here! Leave blank and use the edit character option to upload your single avatar. You must upload an image here for it to work. Recommended image size is 300px by 300px Field Type: Upload Required: No Show on Character Profile: No Show on Character Posts: No Rinse and repeat, subsequent descriptions are the following: "Your second rotating image. Recommended image size is 300px by 300px." Make sure you change the key, so rotate1, rotate2, rotate3 etc Now the code Go to themes and click on the button with </> in it. In the Templates tab, go to characters > character > authorpane Put the following anywhere {{if $character->fields('rotate1')}} <!-- ZERO --> {{$zero = \IPS\File::get( 'core_theme', $character->avatar)->url;}} <!-- BUILD Array --> <!-- ALL THE IMAGES --> <!-- IMAGE ONE --> {{if $character->fields('rotate1')}} {{$string = ''.$character->fields('rotate1').'';}} {{$avrotate1 = explode('"',strstr($string,'https://'))[0];}} {{endif}} <!-- END ONE --> <!-- IMAGE TWO --> {{if $character->fields('rotate2')}} {{$string = ''.$character->fields('rotate2').'';}} {{$avrotate2 = explode('"',strstr($string,'https://'))[0];}} {{endif}} <!-- END TWO --> <!-- IMAGE THREE --> {{if $character->fields('rotate3')}} {{$string = ''.$character->fields('rotate3').'';}} {{$avrotate3 = explode('"',strstr($string,'https://'))[0];}} {{elseif $avrotate3 = $avrotate1}} {{endif}} <!-- END THREE --> <!-- IMAGES ABOVE THIS POINT --> <!-- RANDOM--> {{$charimages = array("{$avrotate2}", "{$avrotate1}", "{$zero}");}} {{$random_av = array_rand($charimages);}} <!-- END RANDOM --> <!-- END array --> {{endif}} Explanation So the first line says, if the player has uploaded something to the custom field with the key, rotate1, then do the following. In other words, this prevents the rest of the code from loading for players who have not uploaded any images to the custom profile fields we made earlier. zero is the normal character profile. This is how I get it into a legible string (url) for use in the array later in the code. What follows are two custom profile fields. As before, I need to get it into a legible string, not a lightbox link. Read more about that here. However, once you get to three images, it is reasonable to assume that your users might not upload an image. Say, you have set up ten custom profile fields, you may have members who only have two avatars to add to the rotation. So, fields from 3 onwards should include an else. This is why image 3 looks like this <!-- IMAGE THREE --> {{if $character->fields('rotate3')}} {{$string = ''.$character->fields('rotate3').'';}} {{$avrotate3 = explode('"',strstr($string,'https://'))[0];}} {{elseif $avrotate3 = $avrotate1}} {{endif}} <!-- END THREE --> The argument is this: IF rotate3 is uploaded, avrotate3 will equal the image URL. IF nothing is uploaded to rotate3, then avrotate3 will equal avrotate1. If you leave the above out, you will have broken images for any user who has not uploaded something for every rotating spot. So if you want to keep adding images after the third one, you should use the following code <!-- IMAGE NUMBER --> {{if $character->fields('YOUR_CUSTOM_PROFILE_FIELD_KEY')}} {{$string = ''.$character->fields('YOUR_CUSTOM_PROFILE_FIELD_KEY').'';}} {{$YOUR_VARIABLE_YOUR_CHOICE_BE_UNIQUE = explode('"',strstr($string,'https://'))[0];}} {{elseif $YOUR_VARIABLE_YOUR_CHOICE_BE_UNIQUE = $AVROTATE1_OR_ZERO_OR_AVROTATE2}} {{endif}} <!-- END NUMBER --> Enough about adding images! Let's learn about the array! <!-- RANDOM--> {{$charimages = array("{$avrotate2}", "{$avrotate1}", "{$avrotate3}", "{$zero}");}} {{$random_av = array_rand($charimages);}} <!-- END RANDOM --> I am saying, $charimages is a list of things. It is, avrotate2, avrotate1, avrotate3 and zero. Then I say, $randomav is a random selection from the charimages list. If you have added more images, you need to add them to the array: <!-- RANDOM--> {{$charimages = array("{$avrotate2}", "{$avrotate1}", "{$avrotate3}", "{$zero}", "{$ANOTHER_VARIABLE}", "{$ANOTHER_ANOTHER_VARIABLE}");}} {{$random_av = array_rand($charimages);}} <!-- END RANDOM --> Hallelujah! We finally have a variable that returns a random custom profile field. Displaying the Avatar Find the following: <li class='cAuthorPane_photo'> <a href="{$character->url()}"> <span class="ipsUserPhoto ipsUserPhoto_large"> {{if $avatar = $character->avatar()}} <img src="{$avatar->url}" alt="{$character->name}"> {{else}} <img src='{resource="default_photo.png" app="core" location="global"}' alt="{$character->name}"> {{endif}} </span> </a> </li> Delete the above and replace with the following: <li class='cAuthorPane_photo'> <a href="{$character->url()}"> <span class="ipsUserPhoto ipsUserPhoto_large"> {{if $character->fields('rotate1')}} <!-- ROTATOR --> <img src="{$charimages[$random_av]}" id="rotatorav" alt="{$character->name}"> <!-- END ROTATOR --> {{elseif $avatar = $character->avatar()}} <img src="{$avatar->url}" alt="{$character->name}"> {{else}} <img src='{resource="default_photo.png" app="core" location="global"}' alt="{$character->name}"> {{endif}} </span> </a> </li> The argument is this: IF there is something uploaded to rotate1, then display our random variable. OTHERWISE if the user has uploaded an avatar, display that. OTHERWISE if the user has done none of the above, display the default avatar. That's it! You just need to rinse and repeat in all of your other themes. Some things to note: You need to add this to the authorpanesmall for it to work on mobile Every post will have a random avatar
    1 point
  31. The applications we will cover are Traditional Application Freeform Application Shipper Application No Application Before we get into the nitty gritty, let us consider what an application at it's most basic, is. An application serves to gate your community. It is about restricting what kind of members you will accept onto your site and it implies that you have a standard you have set that you expect people to meet. People who do not meet your standards are rejected or pended with the hopes that they will lift or change their standards to meet yours. You might for example have expectations surrounding Understanding of site lore (familiarity with canon for fandom forums and how it diverges on your site for example). Ability to communicate, that is, read and write. Familiarity with play by post roleplay mechanics. Some admins do not want to introduce people to roleplay! Ability to develop a character without first roleplaying them. If someone meets your standards in an application, you would then accept them and welcome them into your roleplay. It is worth noting however, that this process is not fool proof. Writing an application is a different skill set to outright roleplay, and it is easy to write an application in such a way as to hide (or simply not mention) game breaking abilities. I have noticed that a number of administrators feel that just because a member has been accepted via application, it means that you can not ask that member to make changes to their character. You can. If a character turns out to be game breaking you can politely approach the player to make changes. Your other members will probably thank you because they wont be having fun either! No Application On the flip side are no application sites. A no application site is not a place of chaos, nor is it a place with no standards. Admins of no application sites will still pull players up for game breaking, or for writing illegible posts. To paint a fun picture: An application site can be thought of as a paddock surrounded by a fence. There is one gate and the admin will be standing there, assessing each person before they're let in. A good admin will continue to observe the people in their paddock for unsavoury behaviour, and will throw those people over the fence should they prove obstinate. A no application site can be thought of as an open paddock where the admin keeps an eye on everyone who enters the paddock. If someone is being unsavoury, that person gets tossed out too. A good no application site will still make their expectations clear. Their informational topics will cover if there is a minimum standard expected from a member's writing, if they're strict about third person and past tense and (in the case where experience in roleplay is not expected) will warn players against the three sins of roleplay: power playing, meta gaming and god modding. You might choose to run a no application site for the following reasons: You're confident in your ability to identify issues with characters as they arise and are able to address them. You do not feel that an application is an efficient use of your time. Ie. That the application process does not pick up enough bad eggs to warrant the amount of time spent on approving and pending applications. You want to provide an environment friendly to people who develop their characters through play. You want to get people into play as soon as possible. The Advantages of No App There is no barrier to roleplay, players can jump straight into the good stuff. Players whose creative process does not involve creating a detailed fully formed character without writing them, are not penalised. Furthermore, players who do prefer to create a character from the ground up before writing them can simply do so. There's nothing stopping them from following their own process. There is no pressure on staff to accept new players as soon as possible. (Accepting sooner rather than later is advantageous because you're striking as soon as the iron is hot. That is, capitalising on the initial urge that made a player sign up.) Allows the creation of minor characters, assuming that the no app site also has activity expectations that is minor character friendly. The Disadvantages of No App Players in this section of the roleplay world have been groomed to go through an application process. Erroneous statements about no application sites being chaotic and messy abounds. As an administrator of a No App site, you need to combat that misconception. You can do that with a robust beginner's guide. Because of the above, players may find it difficult to find character information (make sure you do include a place for information to be written! A place might be your character profile or the plotter). Again, a robust beginner's guide can help people find that information. Some administrators prefer simply having the peace of mind that comes with knowing what each character is about. A no application site does not provide that. Some administrators prefer that character information be laid out in a uniform manner. A no application site may not satisfy their need for uniformity. It can however, do so, if you effectively utilise custom profile fields! Traditional Application As stated earlier, an application serves to gate the community by creating a point in which an administrator assess each person and their characters for suitability. This is most commonly done through the traditional application. The traditional application is a form containing fields for the user to fill out. Examples of what those fields might be include: Character name Age Alias/nicknames Birthday Gender Occupation Birth place Face claim (if the site uses them) General appearance Clothing (can be for historical accuracy reasons, or to help other writer's visualise the character without needing the character's writer to keep on rehashing the norm) Personality Family connections History Skills/powers (weapons, magical, talents, etc) Species Sexuality Height Weight And so on. Some traditional applications might also include some fields for the player to fill out. These fields are typically: Player name Timezone/country Age Gender Roleplay limits Some traditional applications are long and involved. Some might be nice and short. Some may include silly (and fun!) little fields like astrological sign or MBTI type. What you include depends entirely on your site and what you want to be able to assess. The length and depth of the application is also reliant on what you require in order to ensure that you have all the information you need to make an informed decision on who to approve or who to deny or pend. You might choose to have a traditional application for the following reasons: You like to know exactly what kind of character is entering play. You prefer to cater to players who can create characters without playing them first. You like to be confident in the knowledge that the player has a good knowledge of your site setting. You are not afraid to pull up players for game breaking characters that may slip through your application process. The Advantages of Traditional Applications Traditional Applications are typically used throughout this section of the roleplay world. Whilst you should never do something just because everyone else does, you should consider whether or not doing something differently is worth the effort you need to put into changing user behaviour. You know exactly what kind of character is entering play. This of course, does not apply to people who write misleading applications or who lied in their applications. You are assured that the player is familiar with your site's world and has integrated their character into that world. Some players prefer to have a process in place as they are reassured that the character they have in mind is more than likely, a great fit for the site. The Disadvantages of Traditional Applications You create a barrier for members and slow down the transition from guest to engaged and active member. It is commonly understood that good web design involves a low barrier to entry, the greater the barrier, the less members you engage. (This may be the point for you, however!) You create an extra work load for staff. Life happens to everyone, even staff. If life has happened to staff, the application process can be slowed down or the stress that might already be on your mind can be heightened. Your site will not be inviting to people who find that their best characters are developed through writing. If your applications can not be amended or appended, then they become out of date. Characters grow and change! I encourage all administrators to consider providing a place for players to append their character application to keep track of those changes or to ensure that their application remains accurate. Unless your site has a system in place, people are discouraged from writing minor characters to either assist someone else's plot, or their own. Freeform Application A freeform application is just as it suggests, a place where the player can communicate whatever they want about their character in any way that they desire. It encourages a creative approach to the application and their approach might suggest more about the character than might be communicated through a traditional application. Players can also simply include what information they feel is important about their character, ignoring whatever is unimportant or irrelevant. A player might choose to approach a free form application in the following ways: Through a more traditional application. Information is laid out in dot points or under headings. By writing prose about the character's pertinent history. This may not be indepth! But should include a major and pertinent event. Through an interview, with questions being asked and the character answering in their own voice (and hopefully lies are noted!) Through poetry! A stream consciousness in the character's voice. And so on. The limitation here is only the player's imagination. I personally view freeform applications as a softer version of the traditional application, where characters may not be as fully developed as a traditional application requires, but an admin can still see that the thought is there and that the player does understand the lore of a site. You might want to run a freeform application site because: You still want the assurances that an application provides, but do not require as much detail as a traditional application might typically require. You might also relish the idea of allowing your potential members to stretch their creative juices. And you are content with allowing members to provide as much or as little information as required. You are not afraid to pull up players for game breaking characters, even after they have been approved. The Advantages of Freeform Applications You have a good idea of what kind of character is entering play. This of course, does not apply to people who write misleading applications or who lied in their applications. You are assured that the player is familiar with your site's world and has integrated their character into that world. Some players prefer to have a process in place as they are reassured that the character they have in mind is more than likely, a great fit for the site. You are a bit more friendlier towards players that create their characters through play, assuming that your freeform application does allow for shorter applications! Some players enjoy the creative freedom that Freeform Apps provide. The Disadvantages of Freeform Applications Some people think that freeform applications typically do not provide useful information about the character because they are so esoteric. You need to take steps to ensure that the freeform applications do supply some information about the character. You can do that by making it clear what information you do want from the application, or by encouraging users to provide dot point information if they write esoteric apps. When provided with total freedom, some people freeze up and don't know what to write. You can address this by containing some examples of what a player can do. Or by providing different templates. If your applications can not be amended or appended, then they become out of date. Characters grow and change! I encourage all administrators to consider providing a place for players to append their character application to keep track of those changes or to ensure that their application remains accurate. You create a barrier for members and slow down the transition from guest to engaged and active member. It is commonly understood that good web design involves a low barrier to entry, the greater the barrier, the less members you engage. (This may be the point for you, however!) You create an extra work load for staff. Life happens to everyone, even staff. If life has happened to staff, the application process can be slowed down or the stress that might already be on your mind can be heightened. Shipper Applications Shipper Applications are the hybrids of the application world and have gotten some bad press because of their name. A shipper application is essentially a traditional/freeform application rolled into a plotter. However, because of their name, there is a misunderstanding out there that shipper app sites are focused on 'shipping' that is, the romantic relationships between characters. This is not necessarily true and if this type of application does ultimately appeal to you, you might consider rebranding your application as a plotter app. On a shipper application site, a member creates their application using the form you supply. Your shipper application might include the following: Any of the things a traditional app might include. A freeform section, or only a freeform section. An "about" or an introduction to the character for the purposes of roleplay. A relationships section: lovers/enemies/friends. These sections would typically include what you're looking for or what kinds of things presses the characters good and bad buttons. Other relationships section: this would typically include information where different characters might know this character. For example, work place, school, neighbourhood. Plot points or plot hooks: these are things that the player is looking for. Or ideas for other players to run with. Once the player has submitted their form, the administrator will typically move the form (thread) into a new forum. You might choose to use a shipper application for all the same reasons you might select a traditional or freeform application. In addition, you might have a shipper application in order to give members just one thing to fill in, removing one step to roleplay. In addition, to choose a shipper app, you probably should still feel that they're relevant! The Advantages of Shipper Apps In addition to the advantages outlined in traditional and freeform apps: Users do everything they need to do to get started in one hit. The layout of shipper apps typically provide prompts for plotters, which can make writing the plotter easier for some! The Disadvantage of Shipper Apps I mentioned earlier that they can be misinterpreted as being unduly focused on relationships, but also: Some players feel that plotters are redundant or useless. This seems to be particularly true of sites that utilise discord. All the other disadvantages that come with traditional or freeform applications! As an admin, it is up to you to select the kind of application (or no application!) that works best for you and the kind of community you want to build. I wanted to touch on one more aspect of applications however: The Medium! Traditionally in this section of the roleplay world, applications have been through threads. The admin provides the user with a template that they copy and paste, and then fill in details. This isn't the only way to do an application: An Actual Form Depending on your software, you may be able to use an actual form for your application. For example, if you were an IPS user, you might use character mod. A myBB user might use the Form Creator extension. An SMF user would simply use the Arceus' Character Manager Mod. Profiles Profiles, no matter the software, contain custom profile fields. As an admin, you can simply use these fields to create an application that is visible through the profile! No more needing to hunt down the application, you just click on the character's profile and have the information there.
    1 point
  32. This week we are celebrating the lurkers of RPG communities. Most site operators hope to convert lurkers into full-fledged members of their communities. in this guide, you will see how I made my own site, Hogwarts Rebirth, lurker friendly. Guest Friendly This first point is a rather controversial decision, but my site guest friendly. That mean guests can see every single post (except for common rooms) without having to log in. That way someone who is unsure of what the site is about, and don't know if it would work for them, can see exactly how the site functions. Being guest friendly helps lurkers explore what the site has to offer. From seeing how classes run to how posts throughout the castle and surroundings work. By being guest friendly, lurkers are given to chance to preview and get ready to jump in. While this is not exactly measurable many members have commented to the staff that allowing them to read the topics before joining helped them to make the choice to join the site. Questions and Answers Many times guests and lurkers have questions, but there is not a place for them to contact the site. On the site, we made a guest friendly questions and answers forum. That anyone can ask a question, and once it has been moderated staff or members can answer and interact with the user. We have found that by offering this forum, helps lurkers become more comfortable with the community before jumping in. They can see what types of general questions other students and staff have had. It also offers a medium to voice their own questions before making a final decision to jump in. My staff site has been an increase of new member joins from people who have asked questions before joining. Discord Unlike some sites, our discord completely open to anyone who wants to join. They don't even need to be a member of the site to join. We found it is a good way to interact with users and share what is happening on the site. We have hooks that auto share some posts and a house points feed that alerts the discord whenever new house points have been awarded via staff. Discord for lurkers offers a way to interact with the members of the site and gauge if we would be a good fit for them. The discord server also helps just build the community as a whole. Conclusion In short, we love our lurkers and guests. We want to interact with them and show them what the site is about. Join the discussion, how do you encourage lurkers on your site? We'd love to hear your opinions.
    1 point
  33. Enforcing HTTPS In your MyBB admin control panel you should double check to make sure the board URL is configured correctly. In Configuration --> Site Details ensure the board URL is https:// and not http://. In Configuration --> Site Details ensure the Secure Cookie Flag is set to yes. Setting An HTTPS Redirect We will also need to set up a fancy little redirect protocol, this makes sure that if someone accidentally types http://yoursitename.com/ it will automatically redirect to the correct https://yoursitename.com/ url. You will need to access your sites directory files (either through FTP, File Manager via cPanel or some other preferred method). Please find the htaccess.txt file, rename it to .htaccess and save. If the file is already renamed you do not have to worry about this. If after renaming your file in cPanels file manager you can no longer find it please navigate to Settings in the top right hand corner and check mark the box next to Show Hidden Files (dotfiles) then save settings. Towards the top of the .htaccess file you will need to add RewriteEngine On RewriteCond %{HTTPS} !=on RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] Adding Security Header I would be lying if I tried to describe exactly what this is like I know what I'm talking about so instead the short version is: This ensures that if any images or what not are being loaded through your site over HTTP they will be denied and thrown out. Ensuring that you will keep your fancy green "Secure" flag instead of a circled "i" flag which is basically saying "MIXED CONTENT HERE". In Templates & Themes --> Templates --> current template set --> Ungrouped Templates --> headerinclude add one of these meta tags in beneath the other meta tags. <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests"> This will have the user agent download all content over an HTTPS link, if the content is from HTTP then it ends up 'broken' or showing an error. OR <meta http-equiv="Content-Security-Policy" content="block-all-mixed-content"> This will end up blocking all insecure content. This is a basic guide, if I have missed something important please poke me!
    1 point
  34. So, first up; this is a pretty short guide, I think, I hope, lol, I'm going to try not to be too wordy and dad-joke-y this time. We'll see if I manage. We'll need a mod that'll error on us; I presume if you're here, you do have one! The one that absolutely will error on 2.0.15 without fail is SubAccounts, so we all need to know how to fix that at some point. I have yet to run into a mod that errors on SMF 2.1, but the principle is the same, so, follow along here, too. When the package installer encounters errors, it will highlight what steps of the installation process went awry in its test installation. These are marked red in the steps at the bottom of the installation page. This tells us exactly what to do, incidentally. Disclaimer: Take backups of your files before you do anything. Disclaimer Two: If you're not that good with PHP, do it ONE THING AT A TIME. You are very likely to implode it at some point, you'll need to be able to just undo it easily to get it working again and then stare at it to figure out why it imploded. So, find all the steps that failed, and click the little page icon to the far left side of each step. Copy and paste what it gives you on the pop-up window. It tells you, at the top of that window, what to find in the file it errored in, and at the bottom, what to do with it (add before, add after, or replace). Then, we're going to open the source or template file that it failed on, and search for a bit of the first part that came up in the window we clicked to get the codes. You may need to change up how much you search for to find what you're looking for, but most of the time, you'll find it okay the first time. These automatic installations fail because of other mods, updates, or admins, changing the files and altering what it's looking for just enough that it can't find it anymore. Thereby, finding it requires a human eye, as you'll need to be able to discern that the line you're looking for, is the line you're looking for, even with its changes. Once you're SURE you found it, add in the second code block from the pop-up, either before, after, or replacing the original bit (it will tell you which to do in the error row on the installation page, so make note of it). For those replacement lines, be sure that you keep whatever alterations were made to it before, as well. So compare the two blocks to one another, what's there and what the mod you're installing wants there, and ensure that what you end up with has both the mod that altered it before, and what the new mod wants there, too. Often, a security update to SMF changed one of the lines the package installer is looking for, and it's important to be sure to have the security update still there. Rinse and repeat with all the steps that errored. Voila. Enjoy your new mod! Quick Note for "This mod is not compatible with your version of SMF": Use the emulator at the bottom of the main package manager to emulate the version of SMF that the given mod wants (you may need to get into the package files and find package_info.xml, and look for versioning numbers; you can do this through the package manager's "list files" option). It will then install just fine; this is actually caused by mod writers defining too tightly what version of SMF their mod works for (i.e. specifically defining SMF 2.0.10, instead of SMF 2.0.0 - 2.0.99, which will make it work for 2.0 for like, ever). It's not an automatic condemnation of the mod on your version, it's okay. Emulate and try anyway.
    1 point
  35. SEOUL - THE BASICS Seoul is the capital and largest city in South Korea, stretching for over 30 kilometers and housing almost 25 million people (nearly a quarter of a million of those being international residents). Seoul is bisected by the Han River, which was a source of great political tension over the course of history; as in early days, the political center of Seoul remains in the Jongno and Jung district. Most foreigners are more familiar with the economic center of Seoul, the Gangnam District, thanks to Psy's blockbuster 2012 song "Gangnam Style". Seoul is one of the most visited tourism cities in the world, largely because of the popularity of its dramas and music worldwide. It is also home to multiple spots of international interest, including the most visited national park in the world, Mt. Bukhan, and Lotte World, the biggest indoor theme park on the planet. The aforementioned Gangnam District is likened to the Beverly Hills of South Korea, where many entertainment companies are located and where the highly fashionable go to shop at the multiple markets. High-speed rail connects Seoul to the entirety of South Korea, and every subway and train is equipped with 4G LTE and WiFi. Summers in Seoul are often hot, with average temperatures being about 85 F/29 C, but the all-time highs reaching over 100 F/38 C! Winters are generally fairly cold, with snow and freezing temperatures the norm (32 F/0 C). There is a short rainy season in June and July commonly called jangma that affects the entire Asian region, where humidity is high and flooding is common. Additionally, in the springtime, yellow dust storms can occur, which deposit large amounts of yellow sand from Mongolian regions all over South Korea. South Korean scientists have taken to planting large amounts of trees in forested areas to try and stop the migration of this dust. Cost of living in Seoul is fairly high, with the average apartment costing about $5500 per square foot in American dollars. (Apartments can go for double this in the Gangnam district!) However, the city offers duty-free shopping to visitors, which is hugely beneficial for tourism. The current conversion rate from South Korea's national currency, the won, to US dollars is 1 won to 89 American cents. CULTURE EDUCATION South Korea boasts one of the most educated, literate workforces in the world - as one of the highest-performing OECD countries (bested only by Singapore), education is taken very seriously, viewed as an individual and a family's best chance of upward social mobility. High academic performance is a great source of pride for many South Koreans, to the point where not having a degree from a university is a major stigma for individuals. School years and ages generally are the same as ages for American schools, with one exception - children ages 0-3 will often be enrolled in nursery schools, and will attend kindergarten from ages 4-6. Some parents enroll their children in kindergarten at age 3, giving them three years of kindergarten and a distinct educational advantage. While attending middle school, almost every student has some form of extracurricular activity, whether it be idol training at an agency, martial arts, or tutoring at a private hagwon center (something that an estimated 95% of middle schoolers in South Korea attend). These activities only grow in intensity when entering high school, as a student can feasibly leave for school at 5 am and not return home until 10 pm due to studying, tutoring, and classes. High school is not mandatory for South Korean youth, unlike middle school; however, 97% of South Korean teenagers attend high school. There are multiple types of high schools to attend in South Korea - specialty schools, which teach a certain track of education to prepare students for a specialized career path in college (say, in the sciences); public and private high schools, which teach a rigorous all-around courseload as dictated by the South Korean government; and vocational high schools, which prepare students to enter a career immediately after graduation. Though entrance exams are no longer mandatory for middle school, a student may be required to take an entrance exam, depending on what kind of high school they wish to attend. Attitudes about higher education have been changing in light of the international fiscal crises and depressions of 2007-2008. More South Korean students are opting to go to vocational school and to pursue blue-collar careers in manufacturing fields. Meister schools modeled after vocational and apprenticeship programs in Switzerland and Germany have been established, to encourage younger students to prepare for careers instead of higher education. However, there is a generational gap in regards to education - 93% of South Korean parents in 2012 expected their children to go to university. There are also serious sociological debates about South Korean education. The harsh nature of the educational system, the focus on success, and the lack of a certain future due to economic downturn contributes to an intensely pressured youth. One study estimated that 40% of youth in South Korea have had suicidal thoughts due to the academic pressures put upon them. There is also serious concerns that the current educational system stifles creativity in individuals. GOVERNMENT There are three branches of government in South Korea - the legislative and executive branches, which operate on a national level, and the judicial branch, which operates on both national and local levels. The power for the government is given by the Constitution of the Republic of Korea, and this document dictates that South Korea's head of government will be a president. Much like the American government, there are a system of checks and balances between each of the three branches; these checks were demonstrated with the recent impeachment of former South Korean president Park Geun-Hye. (We will talk more about her current impact later in this section.) The legislative branch is mainly represented by a 300-person body known as the National Assembly. 56 of these members are elected based on proportional votes in elections; the rest are directly appointed by local vote. Sessions of the National Assembly can occur once a year, and go on for no more than 100 days, or can be started due to extraordinary circumstances. All sessions are open to the public, barring a vote to close a session. One of the National Assembly's largest duties is approving the budget of the country every year, which must be approved at least 30 days before South Korea's fiscal year begins. However, the National Assembly votes on many more matters of national importance, and are the main lawmaking body of South Korea. There are four parties with a majority in the National Assembly currently - the Democratic Party, the Liberty Korea Party, the People's Party, and the Bareun Party. The Justice and Saenuri parties are smaller parties; Independents are also represented in the National Assembly. The executive branch is headed by the president, who is democratically elected, and, much like in America, serves as the head of the South Korean military as well. They are assisted by a Cabinet, which functions as a blend of and American cabinet and English-style parlimentary cabinet. There are 15-30 members of this Cabinet, and they all represent and lead different government ministries (i.e., National Defense Committee, Security and Public Administration, Gender Equality and Family, etc.). Cabinet members representing other interests that do not have ministries in the South Korean government may also be present (like Veteran Affairs). The Cabinet cannot bind the President to its decisions, and functions more as an advisory board for the President. The Judicial Branch is headed by the Supreme Court of South Korea, followed by the Constitutional Court, appellate courts, and local courts. There are no independent courts, as all courts must be under national jurisdiction. The Supreme Court has fourteen justices, one of whom is the Chief Justice; this individual oversees all court-related administration and can propose legislation in the National Assembly, in addition to their duties as a justice. Justices serve on the Supreme Court for 6-year terms. The Constitutional Court only sees matters pertaining to the Constitution, including impeachment. There are nine justices on this court - three recommended by the Chief Justice, three by the National Assembly, and three by the President. The President ultimately appoints the entire Constitutional Court. Presidential elections are held every five years in South Korea, barring extraordinary circumstance. The political landscape in South Korea right now is in a state of recovery, as former president Park Geun-Hye was impeached in 2016. Her relationship with Choi Soon-sil, who allegedly extorted bribes in exchange for political favors, had access to classified documentation despite being a civilian, and dictated most of Park Geun-Hye's decisions, was at the center of this impeachment; also figuring in was the public's continued anger at Park Geun-Hye's handling of the tragic Sewol Ferry Disaster, where over 300 schoolchildren died, and past wounds related to Park Geun-Hye's father, who seized power of South Korea in a military coup and ran the country until 1981 as a dictator. She is currently awaiting trial, and has been replaced by Moon Jae-in as of May 2017. MILITARY SERVICE All South Korean men are required to conscript into the military. The current law requires all men between the ages of 18 and 35 to complete some form of compulsory military service. Depending on what branch of the military a man is conscripted into, he can serve anywhere from 21 to 36 months. Active duty in the South Korean Army, Marines, Navy, or Air Force is around 21 - 24 months; non-active duty can last for 36 months. All eighteen-year-olds are required to take health tests in order to determine that they are healthy enough to perform military duties. After that point, men simply have to make sure that they enlist to take their basic training and mandatory service before they are 35. (In order to complete annual military training afterwards for six years, many men enter the military by age 27.) Non-active duty is usually reserved for men who do not completely pass a full physical examination. They can be placed as workers in social welfare offices or in other public service positions. Though I will not be going into all the different duties that a military man can have, all conscripted officers go through a five-week basic training that is oftentimes described as brutal. After service, South Korean men are put on a reserve roster, and must complete annual military training for a few days for six more years. WOMEN'S RIGHTS Traditionally in South Korea, especially in the Joseon Dynasty (which lasted until about 1897), a woman's role was in the home. Confucianism dictated a patriarchal society, and women were often kept out of political affairs unless they were part of the aristocracy. Parents often chose husbands for their daughters. Women were expected to remain chaste before marriage, and if their husband was to die, they were not allowed to remarry. Sexual education for women and men was fairly limited. However, influence from the Western world has seen many changes in women's rights in the past thirty years. In the 1980s, cultural clashes between younger and older generations about women's desires to choose their own partners and maintain their own careers were common; these desires are now accepted as common. Currently, men and women both are allowed the right to a divorce, although financial and social motivators still strongly influence a woman's decision to divorce her husband. There is a glass-ceiling phenomenon in the South Korean workforce - a 2013 study by the Economist found that South Korea ranked lowest of all OECD countries in having women in senior jobs. This is in tandem with large influxes of women working in factories and performing labor to create textiles, electronics, and other items responsible for the economic boom of South Korea. Wage equality is problematic, at about an equivalent level to America's wage gap of 70 cents to the dollar. There is also the pervasive attitude that a woman should work only until marriage, an attitude that is heightened by the social stigma against paternity leave in the workplace. However, despite these challenges, women are becoming a dominant force in South Korea. The patriarchal family register was abolished in 2005, after women were granted the rights of custody to their children and material property in divorce cases in 1991. Samsung has committed to hiring and promoting more women into senior management, while the CEO of the Industrial Bank of Korea is female as well. Women have also, traditionally and modernly, been in charge of family finances, and women are often seen as the planners and executors of their children's educations. There is also the matter of a national drive for equality - the vast majority of South Koreans desire gender equality, according to the UNDP. LGBTQIA+ RIGHTS While homosexuality and transgender reassignment surgery are legal in South Korea, there are still very strong social attitudes against homosexuality and transgendered individuals. Gay and lesbian individuals are not permitted to marry, and the hint of a gay scandal in the idol world could, at the very least, temporarily derail a star's career, as it did with gay comedian and actor Hong Seok-cheon in 2000, who came out on television and found himself blacklisted for many years. His career has recovered in recent years, in large part due to increasing youth acceptance of homosexuality. Unfortunately, multiple shows about LGBTQIA+ issues have been cancelled or not rebroadcast due to protests from the South Korean public. There are no discrimination protections on the books legally for those who feel they are being discriminated against for their sexual orientation. RELIGION South Korea can claim that a majority of their people have no religious affiliation. However, culturally, the country is dominated by three religions - Buddhism, Christianity, and Korean Confucianism. The predominant forms of Christianity in South Korea are Protestantism and Catholicism, which began to spread rapidly after missionaries visited the country in the 1880s. The indigenous religion of Sindo is a shamanic form of religion; unlike Japan's similar Shinto, it never became a national religion. In Sindo, a male or female priest acts as an intermediary between gods/spirits and the human world, in an effort to resolve problems on Earth, via rituals. Sindo was targeted by the regime of Park Chung-hee and was almost wiped out in the 1970s and 1980s, destroying many sites that would probably be labeled world heritage sites today. However, Sindo is making a comeback in modern South Korea. Though Korean Confucianism generally is not a religion that people claim to be a part of anymore, Confucian thought dominates Korean culture. Rites are held yearly at the Confucian shrine in Seoul, and Confucian values like taking education seriously, performing ancestral memorial services, group-oriented living arrangements, loyalty and reverence, and ethics in the workplace are deeply ingrained in South Korean life. Korean Pottery, Tea Ceremony, Gardens, and Flower Arrangement are all also still governed by Confucian teachings and rules. IDOL LIFE DISCOVERY The road to becoming an idol is a long one, but it starts, whether acting, modeling, singing, or dancing, by being discovered. Some idols are discovered by employees of agencies simply going about their daily business, shopping with their families, or going to school. More likely, idols initially attended an audition for a trainee slot with one of the major agencies. Agencies will have auditions not just in South Korea, but in Japan, China, Thailand, the Philippines, and even the United States. (Getting spotted on the street does not make you immune to this audition process! The agencies like to make sure you can carry a tune in a bucket or aren't a completely wooden actor.) Sometimes multiple trainees are let into the agencies after these auditions; sometimes only one is. (The YG audition that found Lalisa Manobahn, a.k.a. Lisa of Blackpink, famously only let her into the agency.) Generally, you have to be at least 11 years old to audition, and most agencies accept trainees age 11-22. Some companies will accept older trainees, but it is very rare to see someone over 25 accepted as a trainee. (Please keep in mind that on Re-Bye, we require your characters to be at least 13 years old.) CONTRACTS Once a potential idol is accepted into an agency, they will sign a contract with the agency to secure their services. Most of these contracts are currently for 7 years; however, this was not always the case. South Korean agencies dealt with a wave of criticism and controversy in 2009 over the terms of their contracts when three members of the band Super Junior sued over the unfair clauses in their contracts, including ones that denied them most of the monetary gains they'd made as the most famous band in South Korea. They are far from the only artists who have taken their agencies to court over this, and the South Korean government has required that a 7-year contract limit be enforced because of these issues. Most contracts do require trainees to pay back the costs of their training, including vocal coaching, room, board, dress, and food. (Some bands, such as GFriend, have mentioned that this left them pretty poor during their first year after debuting.) Leaving an agency early may require a former trainee to pay back these costs out-of-pocket, something that can be extremely difficult. Other items commonly mentioned in contracts for trainees and idols include limits on vacation days, rules on dating and socializing, and delineating fines for inappropriate behavior (like being late to events, aforementioned dating issues, and behavior that could damage the company). TRAINING A trainee can be in the training process at an agency for anywhere from two to eight years - and there is never a guarantee that a trainee will debut at all. Days for trainees are very long, and are packed with vocal lessons, dance classes, language tutoring (so that a trainee will be prepared to speak Japanese, Chinese, and English in case of international debuts), and general studying; some days for trainees can be fourteen hours long. Many trainees are expected to remain in top physical shape. Dieting is very common among all trainees, with agencies also restricting when trainees can eat and drink (a famous rule that's circulated the internet says that women cannot drink water after 7 pm to avoid bloating). Trainees also work through physical injuries, exhaustion, and other physical ailments. Trainees all live together in the agency dormitories. Many trainees create life-long bonds here, and become very close friends. Even after debuting, many in the same agencies will continue to support the people they trained with, by sharing their songs online through social media or appearing with them on variety and reality shows. Depending on the agency, trainees can be forbidden from dating each other and trainees/artists from other companies, but we'll talk more about that later. DEBUTS Agencies will, eventually, take certain trainees and prepare them for debut. The debuting process is very jam-packed - the soon-to-debut artist will record their singles/album, learn a dance for their title song (lead single) to perform at all the music shows, film the music video for said title song, photo shoots, various other promotional events which can include debut concerts, fan meetings, online introduction videos, dance practice filming... there are many things that happen before an artist debuts! Debuts, as mentioned earlier, are not guaranteed in a trainee's contract. Not only that, a debut does not mean that an artist's work ends! They continue to practice their singing, dancing, rapping, and, occasionally, songwriting skills, with additional promotional schedules. THE SIDE-EFFECTS OF FAME Congratulations! You have debuted! No matter how successful your debut is, you will generally end up with some fans in South Korea and abroad. What does that mean for you? For starters, idols are expected to interact with their fans. The main way to do so is through social media videos, usually posted on VLive or Naver, the main social media apps in South Korea. Others use Twitter extensively to get their message out. Another way to do so is for an agency to organize fan meeting events. These events often involve question and answer sessions, high-touch (an event where fans get to high five their favorite bands), and gift-giving from fans to idols. Sometimes there can even be special events organized between fans and idol groups that can be attended by winning contests and/or getting a special ticket or item inside copies of the band's album - these can include meals with the band, meet and greets, or even small trips! Idols are held to very high standards of behavior by their fans, very similar to American child stars. Regardless of gender, idols are expected to be constantly available, or to appear available, to their fans through social media, fan meetings, appearing on variety shows, and various other activities. Many idols have online fan cafes, where fans will discuss the idol and support them in their various endeavors. These fan cafes also are in charge of organizing to send gifts and other tokens of affection to their favorite band members on special occasions (member birthdays, concerts, music show stages, etc.). There are downsides to this level of interaction with fans: - Idols are put onto pedestals and expected to act as perfectly as possible. Korean internet commenters, often called 'netizens' or 'Knetz', can be exceedingly harsh on celebrities that disappoint them. A scandal of any kind can destroy an idol, to the point of even ruining whole band's careers over the indiscretions of one member. There are plenty of stories of idols committing minor indiscretions and having their whole careers destroyed - in some cases, like the case of Solbi, someone faking a scandalous event about your past can ruin your career. (Two people faked a sex tape and sold it as being of her and her manager. Though they went to jail, the damage to Solbi's image was already done.) - Sasaeng fans are a constant threat to idols. These fans often stalk idols wherever they go and generally invade their privacy - the most extreme among them will install cameras in their favorite idols' homes, steal items from their dormitories, and may even try to kidnap them (some sasaeng fans tried to kidnap the band EXO by driving a van that looked like one from their agency; their manager thankfully noticed the ruse just in time). And god forbid you start dating. There is a large network of sasaeng fans online who will pay each other for or trade photos and other idol-related items to each other. However, the idol life can be unlike anything on earth. Idols who are successful often go across the world to perform their greatest hits, in addition to gaining sponsorship deals with the biggest labels on earth. Most idols do truly care about their fans, and often give their money to charitable causes to help out those in need - one of the biggest traditions in k-pop is for fan cafe members to donate bags of rice to help the hungry and poverty-stricken, in the names of their favorite idols. K-pop idols are revered as the most glamorous in South Korea, and being an idol can lead to a lifelong career in the entertainment industry, either as a television host, a songwriter, an actor/actress, or even a commentator.
    1 point
  36. How a person finds and nurtures inspiration varies and thus this guide shouldn't be taken as the be all and end all of inspiration growing. You should discard whatever doesn't ring true for you. Notice the terminology I'm using. Inspiration conceptualised as a burst of energy is not sustainable and is inconsistent. Inspiration should therefore be re-conceptualised to something that is more akin to a field that is verdant with wild flowers and thickly forested. A place that is therefore, tended to and cared for, and that you can turn to for your creative sustenance. Passion Naturally, if you are passionate about what you write, you will find writing easier and livelier simply because it is bubbling with something that you love to think about and dwell on. Identify what excites you and pursue it without shame and without worrying about what you should and shouldn't write. Nothing will kill your drive faster than writing without the fire and brimstone of passion. Curiosity The world is full of oddities, weirdness and the unexpected...if you're paying attention. Keeping yourself closed off from the world does not encourage an imagination that is rich with variety. Without variety, you have less to draw on. Therefore, be curious. Engage and be inquisitive about the world you inhabit, allowing yourself to ask questions for their own sake and for those answers to send you down rabbit holes of inquiry. Be curious about not just information, but the sights, sounds, smells and textures that you encounter. Arguably however, it is not enough to be curious if you are also not receptive to what may come back. Receptivity means to discard your assumptions and sense of right and wrong, thus to receive without judgement. Furthermore to be receptive is to dismantle the barriers you might have erected (for whatever reason) between yourself and other people's stories, beliefs and emotions. It is other people that can inspire, inform and challenge the characters in your head. Without curiosity paired with receptivity, you limit the variety of experiences, knowledge, insights, sensations and stories you can draw on to feed your own writing. Discipline A lot of writing books, guides and advice stress the importance of a daily writing schedule and a particular space. This advice however, relies on this schedule and space being consistent in order to condition you into writing. What if you're a shift worker? What if the space or the tools are unavailable to you? What if you're just fucking tired and need a break for the day? Take some pressure off of yourself. Even time spent thinking about your character and their situations is valuable time spent inhabiting your character's mind. You do not need to pressure yourself into writing every day. When I talk about discipline here, I am talking about in terms of story structure: in other words, how things happen and why. Instead of suffering for the sake of suffering, or revealing things too soon, you can think about how prolonging a reveal could have a greater impact than if you pulled the trigger too soon. You can have highs and lows, so that the lows are contrasted with the highs and both are therefore more visible - thus packing more punch. Discipline can also be found in just encouraging good lifestyle habits. Your mind is not separate from your body, it requires good habits in order to function at it's best. What those good habits mean for you might vary based on your body, career, location and living situation. Some of the things I am about to suggest might be problematic or difficult to acquire. If they are, don't focus on them and bring yourself down, or get salty over this article. Instead, embrace the creative challenge of substituting the below with something that is feasible for you. Disclaimer aside, my general good habit list: Go outside and breathe some air Eat some vegetables (frozen if you can't get fresh!) Drink some water Hang out with a non-object Feeding your Imagination Consume content! Be the voracious monster that greedily absorbs all of the content around it. Content can be anything: Books and comics Music Films Television (even trashy breakfast shows!) Photographs Art Blog, magazine or newspaper articles Environment (whether walking in nature or researching some unique animals) Dreams New and old technology Science Other hobbies Games* Dreams People By consuming a variety of content, you enrich and diversify your imagination, giving you so much more to draw on. * A note on games. Whilst some of the stories and ideas can be interesting and inspirational, I have often found that the level of stimulation that games provide can dull my imagination and writing. If you have been gaming for a while and find that your creativity is not as fertile as you would like, try taking a break for a couple of days and do anything else. Rewarding your Imagination Classic classical conditioning. Rewarding your imagination for coming up with ideas by writing them down. If you discard the majority of your ideas, images and questions as they come up, you're essentially discouraging yourself from coming up with more. So reward your imagination by writing your ideas down! Come up with an idea while you're on the train? Tap it into your phone! Prefer the tactile sensation of ink on paper? Carry around a small notebook that you can fit into your pocket. Wearing women's jeans? Buy a smaller notebook - I have a notebook that fits into my pocket. It has gotten quite bent and scuffed but that's ok! I didn't buy it to look pretty. Acknowledgements The bulk of this guide was inspired by Wonderbook: The Illustrated Guide to Creating Imaginative Fiction by Jeff Vandermeer. His chapter spent on inspiration is much more in depth and the whole book is rich with advice and ideas.
    1 point
  37. Go to your cpanel. Not sure how? Once you're in your cpanel, click on FTP accounts. Scroll down and under Special Accounts, find your main account. This is identified by the little male icon on the left hand side, under the type column. Click Configure FTP Client A new section will expand. Click on SFTP Configuration File for the software that you are using. Click on Instructions (new window) for details on how to use the SFTP configuration file. Using the configuration file means that you do not need to enter any of your site details into your ftp software, as the configuration file already contains all of those details. Once you've done all that, you're in!
    1 point
  38. Creating a theme is no quick process. Anyone that tells you that has only used page builders. Making a theme for a forum isn't as easy as drag and drop (at least not yet unless you are using IPS lol). Now, the first step to creating your own custom theme is thinking through your theme and coming up with a mock up. Some good questions you want to ask yourself: Am I going to take the time to make this mobile friendly? Sidebar or no sidebar? Where and how do you want your menu to display? What content do you want to display to end users? Dark or light theme? I cannot soundly recommend a "medium" theme as there isn't enough contrast to be accessible for low visibility users and it's important that they be able to read. These things will help you figure out the next part which is likely the most important part. Creating a mockup. Now there are sites on the internet that can help you with it. I'll be honest, it may just be easiest to mock it up in photoshop or paint and just mark what you like and where you like it. This will change as you code it but this at least gives you a direction to go. When you are feeling lost it's good to pull it up. You can/should make a mock up for any page that you want to customize. This means the topics page, the posts page etc. That way you have a general idea of what you're coding when you get to that step.
    1 point
  39. In this wee guide, I'm going to show you how to do a side by side forum layout with MYBB and Jcink. This is the only customization that this code does. Mybb Preview (select Grid Forum from the theme selector down the bottom). Jcink Preview. What we're basically going to do is this: <div class="forum-flex"> Category Header and other goodies <div class="forum no1"> Forum Header Other goodies </div> <div class="forum no2"> Forum Header Other goodies </div> <div class="forum no3"> Forum Header Other goodies </div> </div> And with the CSS that is at the bottom of this post, we will get something like this: The HTML for MyBB forumbit_depth1_cat <table border="0" cellspacing="{$theme['borderwidth']}" cellpadding="{$theme['tablespace']}" class="tborder"> <thead> <tr> <td class="thead{$expthead}" colspan="5"> <div class="expcolimage"><img src="{$theme['imgdir']}/{$expcolimage}" id="cat_{$forum['fid']}_img" class="expander" alt="{$expaltext}" title="{$expaltext}" /></div> <div><strong><a href="{$forum_url}">{$forum['name']}</a></strong><br /><div class="smalltext">{$forum['description']}</div></div> </td> </tr> </thead> <tbody style="{$expdisplay}" id="cat_{$forum['fid']}_e"> <tr> <td> <div class="forum-flex"> {$sub_forums} </div> </td> </tr> </tbody> </table> <br /> forumbit_depth2_forum <div class="forum no{$forum['fid']}"> <table style="width: 100%; height: 100%;"> <tr> <td class="{$bgcolor}" align="center" width="1"> <span class="forum_status forum_{$lightbulb['folder']} ajax_mark_read" title="{$lightbulb['altonoff']}" id="mark_read_{$forum['fid']}"></span> </td> <td class="{$bgcolor}"> <strong> <a href="{$forum_url}">{$forum['name']}</a> </strong>{$forum_viewers_text} <div class="smalltext"> {$forum['description']}{$modlist}{$subforums} </div> </td> <td class="{$bgcolor}" align="center" style="white-space: nowrap"> {$threads}{$unapproved['unapproved_threads']}<br> Threads </td> <td class="{$bgcolor}" align="center" style="white-space: nowrap"> {$posts}{$unapproved['unapproved_posts']} <br> Posts </td> <td class="{$bgcolor}" align="right" style="white-space: nowrap"> {$lastpost} </td> </tr> </table> </div> The only important part for this code is the flex is the div, you can change whatever you like within the divs. So really, all you need is this: <div class="forum no{$forum['fid']}"> <!-- your forum coding here --> </div> forumdisplay_subforums <table border="0" cellspacing="{$theme['borderwidth']}" cellpadding="{$theme['tablespace']}" class="tborder"> <tr> <td class="thead" colspan="5" align="center"><strong>{$lang->sub_forums_in}</strong></td> </tr> <tr> <td> <div class="forum-flex">{$forums}</div> </td> </tr> </table> <br /> HTML For Jcink Category Headers <div class="tableborder category" id="cat-<!-- |cat_id| -->"> <div class='maintitle<!-- |collapsed_class| -->' align='left'> <span style='float:right;'><a href='#' onclick='catcollapse("<!-- |cat_id| -->");return false;' id='main_<!-- |cat_id| -->'><!-- |collapse_img| --></a>&nbsp;&nbsp;</span> <{CAT_IMG}><a href="index.php?c=<!-- |cat_id| -->"><!-- |cat_name| --></a></div> <div id='cat_<!-- |cat_id| -->' style="<!-- |collapsed_style| -->"> <table width="100%" border="0" cellspacing="1" cellpadding="4"> <tr> <td> <div class="forum-flex"> <% FORUM_ROWS %> </div> </td> </tr> </table> </div> </div> <br class='cat-lb' /> Forum Row <div class="forum no<!-- |forum_id| -->"> <table style="width:100%;height:100%"> <tr class='forum-row'> <td class="row4" align="center"> <!-- |img_new_post| --> </td> <td class="row4"> <b><a class="tooltip" tooltip="<!-- |description_clean| -->" href="?showforum=<!-- |forum_id| -->" alt="<!-- |name| -->"><!-- |name_text| --></a></b> <br /> <span class='desc'><span class='forum-desc'><!-- |description| --></span> <!-- |subforums| --> <br /> <span class='forum-led-by'><!-- |moderators| --></span> </span> </td> <td class="row2" align="center"> <!-- |topics| --> </td> <td class="row2" align="center"> <!-- |replies| --> </td> <td class="row2" nowrap="nowrap"> <!-- |last_post| --><br /> In: <!-- |last_unread| --><!-- |last_topic| --><br /> By: <!-- |last_poster| --> </td> </tr> </table> </div> The only important part of the above code is the div class forum. You can change whatever you like within that. So all you really need is this: <div class="forum no{$forum['fid']}"> <!-- your forum coding here --> </div> CSS for both Jcink and MyBB .forum-flex { display: flex; flex-wrap: wrap; } .forum-flex .forum { flex-basis: 48%; /* not working? Try and decrease this number */ margin: 1%; flex-grow: 2; } So what's going on here? Display flex tells the coding that the children of the forum-flex are to behave flexibly. Flex-wrap tells the children of forum-flex to wrap onto a new line if need be. Flex basis is the width of the forum, if possible. I put 48% to account for the 1% margin on either side. Flex-grow tells the forum to grow to fill the entire available space. If you wanted to fit more forums on a line, just change the flex-basis! Also, so that the forums look neatly uniform, I recommend putting a height on .forum. Anyway, that's it! I hope that helps, if you need any assistance, please feel free to yell.
    1 point
  40. Want a push in sidebar for mybb (or icyboards)? Follow this guide to get your very own! A lot of the current sidebar codes rely on javascript that inserts absolute positioning. The problem with this is that it throws out a lot of the dropdown menus that are native to mybb, or breaks them completely. To avoid breaking other elements of your forum, I recommend using a CSS only solution. The sidebar we are creating will be functional for mobile users (assuming your theme is set up to be responsive), as well as for the desktop and you can see it in action here. Select Fluid or sidebar from the theme menu. First off, the HTML! Go to the theme you want to add a sidebar to, and then go to Templates > Header Templates > header Paste the following into the very top of your header template. <input type="checkbox" id="navigation" /> <label for="navigation" id="navigation"> <i class="fas fa-bars"></i> </label> <div class="sidebar trow1"> <ul class="fa-ul"> {$welcomeblock} </ul> <div class="trow1 aboutus"> <h3>About Us</h3> Prow scuttle parrel provost Sail ho shrouds spirits boom mizzenmast yardarm. Pinnace holystone mizzenmast quarter crow's nest nipperkin grog yardarm hempen halter furl. Swab barque interloper chantey doubloon starboard grog black jack gangway rutters. Deadlights jack lad schooner scallywag dance the hempen jig carouser broadside cable strike colors. Bring a spring upon her cable holystone blow the man down spanker Shiver me timbers to go on account lookout wherry doubloon chase. Belay yo-ho-ho keelhaul squiffy black spot yardarm spyglass sheet transom heave to. <p /> Trysail Sail ho Corsair red ensign hulk smartly boom jib rum gangway. Case shot Shiver me timbers gangplank crack Jennys tea cup ballast Blimey lee snow crow's nest rutters. Fluke jib scourge of the seven seas boatswain schooner gaff booty Jack Tar transom spirits. </div> </div> As you can see, I have assumed that you have the new fontawesome library installed. If you have not, replace <i class="fas fa-bars"></i> with any text or a menu image. You will also notice that I have included the welcomeblock template in the sidebar. The welcomeblock template includes guest and member links. If you are working from a theme that you have already worked on, please skip to the CSS Section. BUT If you were working from a fresh template, with no edits, you will want to do the following: Find the following in header template (the same one we just pasted into): {$welcomeblock} <!-- </div> in header_welcomeblock_member and header_welcomeblock_guest --> <!-- </div> in header_welcomeblock_member and header_welcomeblock_guest --> Replace it with </div></div> Click save and return to listing. Go to header_welcomeblock_guest Delete everything and paste in the following <span class="welcome">{$lang->welcome_guest} <a href="{$mybb->settings['bburl']}/member.php?action=login" onclick="$('#quick_login').modal({ fadeDuration: 250, keepelement: true, zIndex: (typeof modal_zindex !== 'undefined' ? modal_zindex : 9999) }); return false;" class="login">{$lang->welcome_login}</a> <a href="{$mybb->settings['bburl']}/member.php?action=register" class="register">{$lang->welcome_register}</a></span> <div class="modal" id="quick_login" style="display: none;"> <form method="post" action="{$mybb->settings['bburl']}/member.php"> <input name="action" type="hidden" value="do_login" /> <input name="url" type="hidden" value="" /> <input name="quick_login" type="hidden" value="1" /> <table width="100%" cellspacing="{$theme['borderwidth']}" cellpadding="{$theme['tablespace']}" border="0" class="tborder"> <tr> <td class="thead" colspan="2"><strong>{$lang->login}</strong></td> </tr> <tr> <td class="trow1" width="25%"><strong>{$login_username}</strong></td> <td class="trow1"><input name="quick_username" id="quick_login_username" type="text" value="" class="textbox initial_focus" /></td> </tr> <tr> <td class="trow2"><strong>{$lang->password}</strong></td> <td class="trow2"> <input name="quick_password" id="quick_login_password" type="password" value="" class="textbox" /> <a href="{$mybb->settings['bburl']}/member.php?action=lostpw" class="lost_password">{$lang->lost_password}</a> </td> </tr> <tr> <td class="trow1">&nbsp;</td> <td class="trow1 remember_me"> <input name="quick_remember" id="quick_login_remember" type="checkbox" value="yes" class="checkbox" checked="checked" /> <label for="quick_login_remember">{$lang->remember_me}</label> </td> </tr> <tr> <td class="trow2" colspan="2"> <div align="center"><input name="submit" type="submit" class="button" value="{$lang->login}" /></div> </td> </tr> </table> </form> </div> <script type="text/javascript"> $("#quick_login input[name='url']").val($(location).attr('href')); </script> Save and return to listing. Go to header_welcomeblock_member Delete everything and paste in the following: <span class="welcome">{$lang->welcome_back} <a href="{$mybb->settings['bburl']}/member.php?action=logout&amp;logoutkey={$mybb->user['logoutkey']}" class="logout">{$lang->welcome_logout}</a></span> <ul class="menu panel_links"> {$usercplink} {$modcplink} {$admincplink} </ul> <ul class="menu user_links"> <li><a href="javascript:void(0)" onclick="MyBB.popupWindow('{$mybb->settings['bburl']}/misc.php?action=buddypopup&modal=1', null, true); return false;">{$lang->welcome_open_buddy_list}</a></li> {$searchlink} {$pmslink} </ul> Save and return to listing. Now we are ready for the CSS. The CSS! Go to your theme's style sheet list. Click Add Stylesheet and call it sidebar.css Click write my own content. Paste in the following: label#navigation { position: fixed; top: 0; right: 0; display: block; font-size: 2rem; padding: 10px; background: #5f9797; color: #ffffff; z-index: 999; } body > input[type="checkbox"] { display:none; } #content { margin: 0 auto; width: 80%!important; -moz-transition:all 300ms ease-in-out; -webkit-transition:all 300ms ease-in-out; -o-transition:all 300ms ease-in-out; transition:all 300ms ease-in-out; } input[type="checkbox"]:checked ~ .sidebar { margin: 0; } input[type="checkbox"]:checked ~ #container { -webkit-transform:translate3d(15vw, 0, 0); -moz-transform:translate3d(15vw, 0, 0); -o-transform:translate3d(15vw, 0, 0); transform: translate3d(15vw, 0, 0); width: calc(100% - 15vw); -moz-transition:all 300ms ease-in-out; -webkit-transition:all 300ms ease-in-out; -o-transition:all 300ms ease-in-out; transition:all 300ms ease-in-out; } .sidebar.trow1 { padding: 0; } .sidebar { position: fixed; top: 0; left: 0; height: 100vh; width: 15vw; margin:0 0 0 -15vw; -moz-transition:all 300ms ease-in-out; -webkit-transition:all 300ms ease-in-out; -o-transition:all 300ms ease-in-out; transition:all 300ms ease-in-out; } .sidebar ul { list-style-type: none; padding: 0; margin: 0; } .trow1.aboutus { max-height: 20vh; overflow: auto; } .trow1.sidebar > ul li { padding: 10px 5px; } @media (max-width: 425px) { .sidebar { width: 70vw; margin:0 0 0 -70vw; z-index: 99; } input[type="checkbox"]:checked ~ .sidebar { box-shadow: 50vw 0 5px rgba(255,255,255, .5); } input[type="checkbox"]:checked ~ #container { -webkit-transform:translate3d(0, 0, 0); -moz-transform:translate3d(0, 0, 0); -o-transform:translate3d(0, 0, 0); transform: translate3d(0, 0, 0); width: 100vw; margin: 0 0 0 0; } } You now have a basic push in sidebar! Check it out! Change the colours as needed to suit your own theme. But wait....what did we do? Essentially, we have made a checkbox where it's label is the menu icon. Labels are used with checkboxes because they allow the user to select the text next to the checkbox in order to tick or untick it, rather than having to click on the box itself. So essentially, we are telling the sidebar to stay out of the user's screen, unless the checkbox (the menu) is checked. The breakdown: body > input[type="checkbox"] { display:none; } This hides the checkbox that is an immediate child of the body. We will use the label - the menu icon - as the clickable element. .sidebar { position: fixed; top: 0; left: 0; height: 100vh; width: 15vw; margin:0 0 0 -15vw; } This puts the sidebar outside of the screen. input[type="checkbox"]:checked ~ #container { -webkit-transform:translate3d(15vw, 0, 0); -moz-transform:translate3d(15vw, 0, 0); -o-transform:translate3d(15vw, 0, 0); transform: translate3d(15vw, 0, 0); width: calc(100% - 15vw); } Move the sidebar into view when the menu is clicked. input[type="checkbox"]:checked ~ #container { -webkit-transform:translate3d(15vw, 0, 0); -moz-transform:translate3d(15vw, 0, 0); -o-transform:translate3d(15vw, 0, 0); transform: translate3d(15vw, 0, 0); width: calc(100% - 15vw); } Make the container thinner when the menu is clicked. There are a lot of transitions in the CSS, this is to make the changes smoother. That's the basis of it! Hopefully it helps you, if you do run into any problems, please use the Coding Requests & Help forum.
    1 point
  41. Accessing Profile Field Data in IPS A Mousie guide Those who are used to the JCink custom profile fields system will quickly note that IPS doesn't allow you to define your own "template key" for fields to be worked into your themes. This is largely due to the fact that the template logic system included with IPS allows access to not just custom profile field data, but user data, forum data, record data and whatever else you might find useful. This particular tutorial will focus on accessing user profile field data in the postContainer, but the method remains basically the same for retrieving and outputting data in other locations. Consider: Information about the user who posted a record in any database Information about a forum in the forum row Information about a topic in the topic row Information about the currently logged-in user almost anywhere Note: This tutorial does require directly editing theme templates. Please note that template files that have been modified are not upgraded during automatic IPS upgrading processes and will need to be manually adjusted any time the software is updated. 1. Find your template First you need to find the template you'll be working in. For the purposes of this tutorial, we'll be focusing on the postContainer template. This is the template that wraps around the post text, and includes the author information (also known as the "mini profile") in thread views. By default, any custom user profile fields that are set to display will display as a list. It's not especially pretty, but it is functional. It's also very responsive, so if you don't have a lot of custom profile fields/can make them look the way you want purely with CSS that is a better route to go. But if you want complete control to move fields around individually, keep reading. Open up your Theme Editor by going Themes --> Edit HTML/CSS. That's the </> button to the right of the theme list row. From there, navigate to Forums --> Topics --> postContainer under the Templates window. Open up the postContainer file, and in the right window you'll be able to view and modify the code. Some things to note when editing templates: Files do not autosave. You will need to save changes before they appear on the site. If you mess the template up to the point where it no longer works, but you have no idea how to fix it -- there is a "revert" button. This will return the template to the absolute default, erasing every change you ever made to that template. Useful if you're in a bind, but frustrating if you've made a lot of edits you'll need to remake. I suggest making small edits, saving, and checking your work. That way you'll have more of an idea of what you broke, rather than having to start from scratch. If you've broken it but don't want to reach for the "revert" button yet, you can view your modified template side-by-side with the original. The "show default" setting, when enabled, shows both versions in split screen with differences notated. Very useful! 2. Identify the custom profile fields Somewhere in your postContainer template, doesn't matter where, enter the following code: {{$profileFields = $comment->author()->profileFields();}} {{print_r( $profileFields ); exit;}} What this does is asks the system to find all of the entries under profileFields for the user who wrote the post ($comment->author()), and to store that information in a variable we've called $profileFields. The second line asks the system to print that list of information, and exit all processing once the list is printed. When you refresh a thread, you'll get a page that looks terrifying. Something a little like this: Right click and "view source" to see it in a format that is easier to follow: Array ( [core_pfieldgroups_3] => Array ( [core_pfield_24] => <img src="//content.invisioncic.com/j280720/monthly_2018_02/delav.png.049b569d65e428236644a0bf16355725.png" class="ipsImage" data-ipsLightbox> [core_pfield_2] => <a href="http://www.tallygarunga.com/profile/1-mousie/" data-ipshover data-ipshover-target="http://www.tallygarunga.com/profile/1-mousie/?do=hovercard&amp;referrer=http%253A%252F%252Fwww.tallygarunga.com%252Ftopic%252F519-and-a-very-merry-unwedding-to-you-april-1st-2018%252F%253Fpage%253D2%2526tab%253Dcomments" title="34e92ffb66b0e77b6dafd08a4e8629f3" class="ipsType_break"><span class="admin"><b>★ Mousie</b></span></a> [core_pfield_27] => [core_pfield_28] => Tallygarunga Librarian [core_pfield_8] => 35* [core_pfield_11] => Halfbreed [core_pfield_12] => Sorceraic [core_pfield_9] => She/Her [core_pfield_18] => Eva Green [core_pfield_26] => <div class='ipsType_break ipsContained'><a href='http://www.tallygarunga.com/index.php?app=core&amp;module=system&amp;controller=redirect&amp;url=http://www.tallygarunga.com/characters/tally_staff/adele-ellareisse-devylissea-r15/&amp;key=8bb2eb86b891ce18fa43bfa4d80f7e7cfc044fdfa09040d1bc040051c2c2c3a1&amp;resource=' target='_blank'>http://www.tallygarunga.com/characters/tally_staff/adele-ellareisse-devylissea-r15/</a></div> [core_pfield_30] => [core_pfield_31] => <div class="ipsClearFix"> <div style="background-color: ; height: 15px; width: 15px; border: 1px solid black;" class="ipsPos_left"></div><div class="ipsPos_left"> &nbsp; </div> </div> ) [core_pfieldgroups_1] => Array ( [core_pfield_3] => She/Her [core_pfield_4] => GMT+10:00 [core_pfield_5] => [core_pfield_1] => ) ) This is the HTML and information set that made that terrifying looking page. You can see here how the profile fields show next to their column names in the database. We need that information, so copy and paste this into a separate document, and we'll fix the page up so you can use it again!! 3. Un-breaking the template All you need to do here is remove this line: {{print_r( $profileFields ); exit;}} Save the template, and refresh. It should have gone back to normal, and now you have all the information you need to locate and output your custom profile fields! Note: Because this does break the thread view, it's not recommended to look this stuff up during busy times on your board. You can run this in a different theme that only you have access to, and it won't affect the main board. Or you can be like me, and do it anyway when you feel like. Don't be like me. 4. Allocate variables to the profile fields Looking at that list, I can see that each of the profile fields is under a particular group, and assigned to a particular name. We assign them to a variable using the following line of code: {{$age = $profileFields['core_pfieldgroups_3']['core_pfield_8'];}} Here you can see that I've created the variable $age (this can be anything, but it helps if it relates to what you're using it for!) and I've told the system that when we use $age, I want it to find the data stored under core_pfield_8, which is in the core_pfieldgroups_3 array contained in $profile fields. To get different information, adjust the array and field names. So: {{$playbi = $profileFields['core_pfieldgroups_3']['core_pfield_18'];}} Accesses the play-by name that is held in core_pfield_18 under core_pfieldgroups_3. And: {{$timezne = $profileFields['core_pfield_groups_1']['core_pfield_4'];}} Will access the information for the timezone in core_pfield_4, under core_pfieldgroups_1. So you can see how the code relates to the array list that we accessed before. Once you've created a variable for each of the fields you'd like to use, they're far easier to slot into your code. 4a. Accessing non-custom profile fields But what about other member information? The array listed above only covers fields created by the admin. There's a different way to access those. As before, put this piece of code into your template. {{$userFields = $comment->author();}} {{print_r( $userFields ); exit;}} Note that it doesn't ask the system to look only for profileFields -- this will output a list of all information tied to the member's account. It does include the custom profile field array, and also information related to the member's group. But what we're interested in is toward the bottom with the array that begins with [member_id]. Not all of these are especially useful, but some I like to include in mini profiles are the number of posts (found under [member_posts]) and the member title (found under [member_title]). Once you've got the information for the user fields that you want, delete both lines of code added in 4a from your template, save, and refresh. You should only have the single line of code added in 4 remaining (as this defines the $profileFields list used when creating variables). We don't need this for standard user fields, as we can access those in a different way. The list makes it easier to see what they're called. 5. Outputting the variable data To print the data from any variable, all you need to do is insert it into your template inside single curly brackets. Eg: {$age} As long as it is further down the template than the code lines that define the variable, this will display the content contained in that field. You can wrap this in HTML to make it pretty, shift it around to where you want it, it's your variable to do with as you like! To output the data of regular profile fields, we take a different approach. This will show the number of posts the member has made: {$comment->author()->member_posts} Or to show the member title: {$comment->author()->member_title} As you can see, we use the $comment->author() list and then just the name of the field. 6. Getting some style You can add some HTML and CSS in there to make your profile fields look awesome. Never hard-code CSS into your HTML, always define a class and add the styling into your CSS documents. You'll thank yourself later! Going back and editing a HTML document is far more painful than adjusting the CSS, especially when you're using the same style rules for multiple instances of an element. Here's a basic block that would show the member title, posts, age field and play-by field: <div class="blocko"> <div class="allacross">{$comment->author()->member_title}</div> <div class="labl">Age:</div> <div class="valu">{$age}</div> <div class="labl">Play-by:</div> <div class="valu">{$playbi}</div> <div class="labl">Posts</div> <div class="valu">{$comment->author()->member_posts}</div> </div> And you might style it along the lines of this: .blocko {display: flex; flex-wrap: wrap; font-weight: bold; text-transform: uppercase;} .allacross {flex-basis: 100%; } .labl {flex-basis: 50%; font-weight: Bold; } .valu {flex-basis: 50%; } This just creates a block where labl and valu display at 50% of the line they're on, while allacross takes up the full length of the block. Field labels are in bold, and the member title is set to bold and uppercase. But this does create one problem: this HTML is going to be processed even if there's no information contained in that field. You'll get field names, but empty spaces---and that's gross. So here's how to fix it. 7. Checking for value, not printing empty fields We need the system to check that there's information to output before it processes the HTML. We do that with an IF statement: {{if $age}} {$age} {{endif}} The "if $age" portion of the statement asks if there is any information contained in the variable, and if there is to process the code between the if and endif tags. In the above case, it's just the variable itself. However, you can put HTML between those tags as well. <div class="blocko"> {{if $comment->author()->member_title}} <div class="allacross">{$comment->author()->member_title}</div> {{endif}} {{if $age}} <div class="labl">Age:</div> <div class="valu">{$age}</div> {{endif}} {{if $playbi}} <div class="labl">Play-by:</div> <div class="valu">{$playbi}</div> {{endif}} {{if $comment->author()->member_posts}} <div class="labl">Posts</div> <div class="valu">{$comment->author()->member_posts}</div> {{endif}} </div> In this example, because the divs containing each profile field display are inside the conditional IF statements, they will only appear on the page if there is information to display. This way, you won't get field labels with ugly spaces next to them. But what if you don't want to show certain fields for certain usergroups? 8. Include/exclude based on member group If you run a board that has account per character and player accounts, there are probably some fields that you don't want displaying for members vs characters. Again, we'll use an IF statement to tell the system not to output data if the comment->author() belongs to a certain member group. {{if ($comment->author()->member_group_id != 4) and ($comment->author()->member_group_id != 6) and ($comment->author()->member_group_id != 11) }} {{if $age}} <div class="labl">Age:</div> <div class="valu">{$age}</div> {{endif}} {{if $playbi}} <div class="labl">Play-by:</div> <div class="valu">{$playbi}</div> {{endif}} {{endif}} My three OOC player groups have the ID numbers 4, 6, and 11. This line of code says that for anything between those tags, do not process if the comment->author() is in either of those groups. In plain English: IF the comment author's member group is NOT 4, and NOT 6, and NOT 11: display the age field, and display the play-by field. You can also flip this and tell the system to display a field if the comment->author() group number IS a particular value: {{ if $comment->author->member_group_id = 4 }} {{if $comment->author()->member_title}} <div class="allacross">{$comment->author()->member_title}</div> {{endif}} {{endif}} This tells the system to display the member_title ONLY if the comment->author() group ID is 4. You can find the ID numbers of your groups in your ACP by going to Members/Groups -- and hovering over the Edit button. The number at the end of that URL is the group's ID number. 9. Remove the standard custom field display So you've got nice little code snippets to display your profile fields where you want and how you want, you don't need the default custom field list. So in the template, remove the following: {template="customFieldsDisplay" group="global" app="core" params="$comment->author()"} Now all you need to do is shuffle the template around and make it look how you want! Congrats! 10. Some other useful template snippets The fully formatted username with reputation badge: <h3 class='ipsType_sectionHead cAuthorPane_author ipsType_blendLinks ipsType_break'> <strong>{$comment->author()->link( $comment->warningRef() )|raw}</strong> <span class='ipsResponsive_showPhone ipsResponsive_inline'>&nbsp;&nbsp;{template="reputationBadge" group="global" app="core" params="$comment->author()"}</span></h3> The user photo: {template="userPhoto" app="core" group="global" params="$comment->author(), 'large', $comment->warningRef()"} Author group name/icon: <li>{expression="\IPS\Member\Group::load( $comment->author()->member_group_id )->formattedName" raw="true"}</li> {{if \IPS\Member\Group::load( $comment->author()->member_group_id )->g_icon }} <li><img src='{file="$comment->author()->group['g_icon']" extension="core_Theme"}' alt='' class='cAuthorGroupIcon'></li> {{endif}}
    1 point
  42. When I make an image circular, I find this annoying: Circular image? Square text? Annoying. I would much rather do this: Text curving with the image? Much nicer. Thankfully, it's also super easy to pull off. <div class="container"> <img src="image" /> Lorem ipsum, your text would be here! </div> This is what your mark up will look like. A container that holds your image and text. Then your CSS: .container img { float: left; border-radius: 100%; shape-outside: circle(50%); margin: 0 5px 5px 0; height: 200px; width: 200px; } You want to float the image to the left, because it tells the text to wrap around it. You want to add in the border radius to make the image into a circle. Shape-outside is the magic. It tells the text outside of the image to make a circular shape around the image. Margin is just some spacing and the height and width are self-explanatory. And that's it! Simple and snazzy.
    1 point
  43. There is this common trend among roleplay admins, we all have unrealistic expectations for what we consider a 'successful' site. When we don't meet these unrealistic expectations we feel terrible, we think that we are failing, we feel that maybe we should just give up. This is bullshit!!! Things that we think should happen to determine that site is successful and the reasons they are BS. The moment I open a site I should have 10 members and I should just get more and more from there. Only about 25% of roleplay sites get more than 10 active members (at one time), ever, throughout their entire lifespan. It's even less as the numbers go up. Additionally, member count doesn't make a site, members do. I advertise everywhere and none of my guests join my site. It's a pretty well known fact that statistics are skewed when it comes to guests online. Spiders/bots count as guests and are most likely your biggest fans. They love when you update content so they will visit regularly. Everyone hates me. If you believe this then you shouldn't be an administrator. This isn't meant to put you down but seriously if you think people/the world is against you then you will always feel the negative and none of the positive parts of being an administrator. As an administrator you get the really shitty stuff. You have to deal with the bad things and the problem members and the problem problems, your job is already shit, if you stack that with a "nobody likes me, everybody hates me... I guess I'll go eat worms" mentality there will never be a moment that you enjoy roleplaying, enjoy your site, or enjoy being an admin. My site is failing, I should just shut it down. Yes, absolutely. If you aren't behind your site, no one else will be either. You need to be the advocate for your site and so you have to believe that it's going to be successful in order for it to be. No one else does this but you. We don't have 50 posts, hell 10 posts or even 5 per day. My members must hate me or be lazy or flaking. Not really. We all know that life comes first and even your most rapid fire posters will get burned out. Power through, continue on and keep going, that's all that you can do to get through any slump. Thinking the site is dying because of the slump? It's wrong. Every roleplay has slumps (even if they don't appear to from the outside looking in). The reality is: You choose if your site is successful! This may sound insane but it's one hundred percent accurate. Your site is as successful as you say it is. No matter the numbers, how quickly people join, how they post or really anything. If you open your site and you say "my site is successful" you've succeeded. Congratulations! You have successfully run an RP. When you start to go down a negative administrative route you actually start yourself on a very destructive path. Honestly, this path is the only path that I believe may lead to a truly unsuccessful site. Basically by being overly negative you start to run your site into the ground. The following things start to happen: You start to see fault in all of your members like they are out to get you. Your members joined your site because they like something about it. Becoming paranoid, or similar will actually push those members away. If they had a problem you would know already. You start to blame yourself for not living up to obscure, non-standardized, inaccurate, success standards. As stated above, success isn't deemed by numbers or people or characters or whatever, it's by your sheer attitude. When you blame yourself you start personifying this into places you shouldn't. Your staff, your cBox/chat room, your members, resource sites. When they see that you are losing faith they lose faith and they look for somewhere else to be. By losing faith in your site or yourself you tell your site members not to believe in too. You start to see fault in your site and it's features. Thinking that your features are the specific reason people are not joining, staying etc is a really bad way to go. Changing a lot, and often, will not only start to push away your existing member base but it will start to mix and match things that may not be overly attractive because you see things on "successful" sites that have this or that feature and that must be what makes them that way. Unless you know for sure the change you are making is a good thing it's always a good idea to at least seek advice from your existing members. While not everyone will agree you can get a more basic level of understanding from what they provide you as to what changes would help them enjoy your site more. If your existing members love your site, then new/potential members will likely love it too. All my members left to make another site, this fucking sucks. Hell yeah it does. It's often, not because of you, it's because they are fickle and they wanted something else but it seems like it's all your fault. I won't say, for sure, it's not you or your site setup but this often isn't anything that can't be corrected moving forward. Request a review and see about getting some feedback from any members that are willing to talk. You can go back and forth on features and options and shoulda dones and coulda dones but in the end? You are the reason your site is successful or not and it's all in how you see it. You see that you're successful. Then you are. I know this feels more like a "feel good" but doesn't give you any information sort of guide but that's sort of the point. The number one reason for site death is administrators losing interest in their own sites because they feel bad about it, they feel like they are doing something wrong and that's why "no one" joins. Unfortunately inspiration is a fickle thing and so is life which is what makes roleplayers so selective with the sites that they put their time into. You could run the most amazing site and still only get 3 members over the course of its history. Yeah its a bit frustrating if you had big plans for it but it shouldn't take away from your focus on the existing members, that will likely become great roleplay partners, and growing it from there. You never know, the special care that you put into those three members may get you your next ten.
    1 point
  44. *** Notice: This topic has a section for self hosted/piggy-back hosted MyBB forums that can access their core files through an FTP account for further capabilities of this function. Unfortunately the further capabilities consist of pulling thread prefixes/styled usernames to show as well and if you use Icyboards you cannot access core files to make these edits BUT you can still use Section One! [1.8] Recent/Latest Post Without A Plugin If you are anything like me you hate a long list of plugins in your ACP and you really hate uploading plugins because anything could go wrong (like accidentally placing files where they don't belong and finding them 3 weeks later thinking "how the ****?". So here is my replacement for this issue. There are two topics for this section. The first is the basic generic "pulling" and the second is a more advanced clean up for self hosted mybb forums (because unfortunately using the built in portals latest posts/threads function does not show thread prefixes (which a lot of people use for dictating whether or not a thread is Mature, Open, Private, etc.) and it also does not style a username with the color/styles attached to the usergroup) which we will fix in that section of this tutorial. Tutorial Created By: Isoldehn Tutorial Permissions: Please do not re-post this tutorial else where, instead link someone to this thread. Tutorial Needs: Overall, the ability to copy and paste. Section 1 - Knowledge Of MyBB Templates Section 2 - FTP Access & Knowledge On Editing Core Files Section One Using the script to pull the threads from the Portal! Please be sure your portal page is enabled and latest posts is enabled/settings configured. I'll let you figure this out on your own because you basically decide how many to show and from what forums/all forums. Step 1: - Open the ACP - Navigate to Templates & Styles --> Templates --> *current template set you are using* --> Portal Templates --> portal - Find: {$latestthreads} - Replace with: <div class="recent_posts">{$latestthreads}</div> Step 2: - Open up the template where ever you would like to add latest threads/posts to. Generally the option is on the index page, or a header, or even a sidebar. I cannot tell you where to place this since this is your choice. - Insert this: <script type="text/javascript"> jQuery(function(){ jQuery(".recent_posts").load("{$mybb->settings['bburl']}/portal.php .recent_posts"); }); </script> <div class="recent_posts"></div> * Credit for this coding is unnecessary as it is a simple script that can be developed by anyone. Step 3: (optional) - Style your latest posts/threads how you like. - Navigate back to Templates & Styles --> Templates --> *current template set you are using* --> Portal Templates --> portal_latestthreads - Create how you would like the div/table to be shown. You can delete everything inside, coding it to your own liking and then add the variable for the threads back in where you would like the thread/post list to show. Variable below for those that accidentally forget to save it. {$threadlist} - Navigate back to Templates & Styles --> Templates --> *current template set you are using* --> Portal Templates --> portal_latestthreads_thread - Again, create this how you would like it to be shown. Variables for things are below in case you forget to save. <a href="{$mybb->settings['bburl']}/{$thread['threadlink']}" title="{$thread['fullsubject']}">{$thread['subject']}</a> (Link to thread and name of thread) <a href="{$thread['forumlink']}">{$thread['forumname']}</a> (Link & name to the forum/board post was created in) <a href="{$thread['lastpostlink']}">Last Post</a> (Link to last post) {$lastposterlink} (Link to the last person that posted) {$lastpostdate} (Date the last post was made) {$thread['replies']} (Number of replies) {$thread['views']} (Number of views) Section Two Fixing the fact that thread prefixes do not show and usergroup styles do not work. Remember, if you continue on with section two we will be editing core files. BEFORE EVER EDITING CORE FILES YOU SHOULD ALWAYS CREATE A BACKUP OF YOUR SITE/FTP AREA (ALL FILES). Just in case anything goes wrong. This tutorial was also created for the MyBB 1.8 Series. If you use this on 1.6 things could very well go horribly wrong and support for 1.6 is no longer offered through MyBB Support. Step 1: - Open your FTP client or your file area where all core files of MyBB can be found. - Navigate to portal.php and open to edit. Step 2: - Find: $latestthreads = ''; // Latest forum discussions - This is the section/area we will be editing. Below those lines (336 & 337) will be all the edits that are being made. Step 3: - Find: $query = $db->query(" SELECT t.tid, t.fid, t.uid, t.lastpost, t.lastposteruid, t.lastposter, t.subject, t.replies, t.views, u.username - Replace with: $query = $db->query(" SELECT t.tid, t.fid, t.uid, t.lastpost, t.lastposteruid, t.lastposter, t.subject, t.replies, t.views, t.prefix, u.username, u.usergroup, u.displaygroup Step 4: - Find: LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=t.uid) - Replace with: LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=t.lastposteruid) Step 5: - Find: $lastposterlink = build_profile_link($lastposter, $thread['lastposteruid']); - Replace with: $lastposterlink = build_profile_link(format_name($thread['lastposter'], $thread['usergroup'], $thread['displaygroup']), $thread['lastposteruid']); Step 6: - Find: $thread['subject'] = htmlspecialchars_uni($thread['subject']); $thread['fullsubject'] = htmlspecialchars_uni($thread['fullsubject']); $thread['threadlink'] = get_thread_link($thread['tid']); $thread['lastpostlink'] = get_thread_link($thread['tid'], 0, "lastpost"); $thread['forumlink'] = get_forum_link($thread['fid']); $thread['forumname'] = $forum_cache[$thread['fid']]['name']; - Replace with: $prefix = build_prefixes($thread['prefix']); $prefix = $prefix['displaystyle']; $thread['subject'] = $prefix . " " . htmlspecialchars_uni($parser->parse_badwords($thread['subject'])); $thread['fullsubject'] = htmlspecialchars_uni($thread['fullsubject']); $thread['threadlink'] = get_thread_link($thread['tid']); $thread['lastpostlink'] = get_thread_link($thread['tid'], 0, "lastpost"); $thread['forumlink'] = get_forum_link($thread['fid']); $thread['forumname'] = $forum_cache[$thread['fid']]['name']; We are now finished!
    1 point
  45. So to access your notifications you: Click on your username in the top right. Click "Account Settings". On the right click on "Notifications Settings". In here you can review your notifications settings. This would be where you can choose whether you auto follow your own content or replies. How many emails you get from the "email" option and a few other minor choices. "Notification List" option is the list that comes up when you click on the "Bell" icon in the top right. "Email" is of course "email".
    1 point
  46. What to Expect When You’re Expecting (to be a Forum Admin) Being an admin of a forum is a lot like getting a puppy. It seems like a good idea at first because it’s cute and you want something to cuddle with. But puppies need to be housebroken and they need to be trained and you’ve got to spend money on their food and take them on walks. A lot of people go into it thinking it’ll be easy- and like with adopting their first puppy, most of these people are in for a rude awakening. You don’t have to be, though! What Being an Admin Requires A lot, I’ve come to learn. Leadership Skills Unsurprisingly, being the admin of a forum does require that you have some leadership skills. You’ll find yourself struggling if you have a hard time communicating with others and enforcing rules. Shy individuals may also find it difficult to get the community excited about events and the RP in general. Personalities that are very particular about the way they like things to get done will have to be careful to not come off as too abrasive or controlling. Likewise, there’s no room for grudges and if you’ve a hard time letting things go, you might quickly find yourself frustrated and unhappy. Time, Patience, & Diligence Even simple forums require a lot of time from the admin. The community needs looking after, advertising needs to be done, bugs will need to be fixed, scraps are inevitably going to need to be settled. These things happen on almost a daily basis, requiring patience and diligence. On top of all that, the admins should be some of the most active players on the forum- not just out of character, but in character as well. Of course, there are different paces for every forum, but the admin typically needs to be able to manage the pace they want their site to have. Don’t Take Things Personally During your time as an admin, it’s likely you’ll get called all the most terrible things under the sun. You’re going to meet screwballs that will attempt to mess up your site, mess up your plot, ruin your whatever. It can also happen that people you think are your friends turn out to not be your friend. Your members might try and start a “coup.” You just got to be able to shrug it off, let it go, and move on. These are all issues that tend to stem from the other person’s insecurities or them not getting what they want. In other words: it’s them, not you. Admitting that Sometimes it is Actually You Yeah, sometimes it is actually you. Being an admin requires that you’re freely capable of admitting when you’re wrong and when you’ve made a mistake. More importantly than that, it requires that you learn from them. You’re Two People & When You’re One of Those People, Others Come First An admin’s got to be an admin, and an admin gets to be a player on their own forum also. Most of the time, you get to be the latter- which is good news! But sometimes things go south, and you need to put on your admin pants. And when that happens, you need to be able to act as someone without bias. With your admin pants on, you might have to make choices that you wouldn’t want to as a player. For example, you might be close friends with a player- but if they are spreading toxicity on your forum and that is not something you want, your admin self needs to show them to the door. It can hurt. But it’s got to be done for the betterment of your community. When you’re in your admin pants, you need to be able to put others before yourself. Putting Your Foot Down As an admin, you need to be able to put your foot down. Sometimes you need to kick people off your site, sometimes you need to have difficult discussions about a person’s behavior. You need to be able to say no to radical characters or ideas that break your site’s lore. When people beg and ask for pity, you need to be able to stick to your guns. Depending on the community you have, you might need to end up doing this a lot. Just like insults, it’s something you need to learn to take calmly and do your best to not let it bother you. No Pity-Parties or Excuses You’re a human. You’ve got feelings and needs. Sometimes, you need to take a break also. And that is one hundred percent okay! Go do it already! Don’t feel bad about it. But don’t expect pity, don’t make excuses, and do not drag it out. It looks bad when a normal player does it, and even worse when an admin does it. Being an Admin is Hard You might have noticed that by now! But wait- there’s more! You Might Be None of the Above If you’re incapable of all the above, it’s going to be tough for you to be an admin. That is nothing to be ashamed of, however, and it’s no reason to lose hope. Many of the things required of an admin are skills you can learn! That’s the hard part. Because it takes time to learn these skills. As with school and classes, everyone learns differently and at a different paces. Some might catch onto adminning quicker than others, but just because you don’t get the hang of it right away that doesn’t mean you should give up. Things Are Going to Suck While You Learn Not all the time, of course. You’re going to make mistakes, though, and they might make you feel like crap, or they might really impact your forum and the community. Some of these mistakes might be so bad you can’t imagine how you’ll get through them. You will. And it will be easier if you don’t beat yourself up over a slip up, and see it for what it really is: an opportunity to improve. Feelings Are Going to Get Hurt No doubt about it. I’ve warned you that other people will probably be hurting your feelings. What I didn’t mention was that sometimes the person hurting your feelings might even be you. In becoming an admin, you sometimes learn that you aren’t the person you thought you were. It’s not a pleasant experience. No Matter How Hard You Try, You’ll Never Be Perfect Never ever! No matter how long you go at it, there will always be something to learn. No matter how much experience you gain, you will still make mistakes. You’ll still find yourself in situation where you aren’t absolutely certain on how to handle them. Know what, though? That’s okay. It really is. If you are perfect, then there is nothing for you to improve upon. And when there’s nothing for you to improve upon, you get stale. There’s nothing to learn from. You go nowhere. So embrace being imperfect! It’s better that way. Being an Admin is Rewarding Hot diggity, it seemed like I wasn’t ever going to have anything good to say about it, huh? That’s not true, though. Adminning can be a very rewarding experience, and here’s why. . . You Get to Watch Your Puppy Grow Up Which is an absolutely awesome experience, in spite of all toughness. It’s a source of great pride and sense of accomplishment: and for good reason! Look at all the effort you put into that majestic beast, and how well it’s turned out! You Meet New People Meeting new people is a great way to gain experience and learn. Plus, it’s fun! New friends, new people to write with and all that! You Gain Valuable Skills At the least, you’ll get to work on your people, problem-solving, and conflict resolution skills. You might also pick up a few other tricks along the way, like an ability to make graphics, code web pages, make videos, etc., etc. It Makes You a Better Person Or it can, assuming you learn your lessons and actually make an effort to improve for the sake of your forum and community. You grow up a lot, too. Tends to give you reasons to be less selfish, more open. Work on your communication skills, learn more about people, the way they live, and why they do what they do. * Results may vary. Being an admin doesn’t make you a good person automatically and sometimes people get into it for the wrong reasons. This article is assuming the best of people rather than the worst and is also based on the idea that you are not a power-hungry dictator in the making. Is there something you would like to see a guide for? Reply to this topic with your request! Have something you need advice on? Contact me privately and I'll respond to it in my blog!
    1 point
  47. Being Social - a Guide for the Unsocial Whether you are an admin or a player, there's probably been at least one time in your role playing career that you felt you were obligated to be social and chat- and just didn't know how. Or perhaps you want to, and still don't know how. Either way, here's some tips and tricks on being social when that's not your strong area! SAY HELLO! The most important part of being social is simply saying hello! Say hi to everyone who shows up in the cbox and posts something- it validates that you saw them, which is a good feeling for the other person(s). It also gives them a reason to stay around and chat! If you are posting the first message of the day, it is a good idea to say "Hello!" and then include a little detail about what's going on with you today. For example: "Hello! Today I have a dentist's appointment at noon." "AND YOU?" IS YOUR FRIEND! If someone asks you how you are doing, it's always fine to answer them! But remember to ask them how they are doing as well. Make it a habit to ask "And you?" at the end of your response. It's polite, and also gives the other person room to begin a dialogue. ASK OPEN-ENDED QUESTIONS! Don't ask questions that can be answered with a simple "yes" or "no" (or can otherwise be answered with just one word). This winds a conversation down to a close, which is what you don't want. Also avoid asking questions that already have the expected answer in them, which have the same effect. An example of such a question would be: "Are we all well today?" It's reasonable to expect that everyone will say yes (hopefully), and then you've got little to talk about. A good example of an open-ended questions is "What do you have planned today for fun?" Unless the answer is "nothing," then it's not so easy to answer with only one word. ASK FOLLOW-UP QUESTIONS! A follow-up question is a question which is meant to get more information from the answer you were just given. It's an easy way to keep the conversation flowing, and also leads to other possible topics of discussion. An example: You: "What do you have planned today for fun?" Other person: "I'm going to go to the zoo!" You: "Awesome! I love the zoo. What animals are you going to see?" Other person: "I definitely want to go see the giraffes and there's a bird show to watch, too. But we'll probably look at everything." ADD TO THE CONVERSATION! In the above example, the other person's response might seem like an end to the conversation- but it's a perfect opportunity to expand on the talk if you wish! You can do any of the following: Share what animals you like to see at the zoo. Example: "We don't have any giraffes at my zoo, but I really like to visit the tigers! They feed them at around 3.20 and have a presentation about them." Change the topic to something related. Example: "My zoo doesn't have bird shows, but once when I was at a Renaissance fair they had a demonstration on falconry." "Zoom out" and talk about a broader subject. Example: "Giraffes are really cool. I only recently learned that there's more than one kind!" Ask another question. Example: "How many giraffes are at your zoo? We only have two." If you've ever played a video game involving guns or weapons, chances are you've encountered a weapons wheel before. Usually, you have the option to run through your selection of weapons with the D-pad. Think of the above bullet points in this way! These options are your weapons arsenal- select which one best suits the conversation! THINGS TO REMEMBER... The conversation isn't about you. People are egotistical by nature and want to talk about themselves. However, in order to move a conversation forward you do need to include a little bit of what's going on with you and your own experiences as well. Remember to sandwich this between the bits about the other person. A good example is the above example: "How many giraffes do you have at your zoo? We only have two." Be positive! No one wants to talk to a sulker. This is not to say that it's not okay to feel bad sometimes, however if that is the case then that's not the time to try and be sociable with everyone in the public eye. Better to talk to someone privately and open up to a friend instead of everyone in the chatbox. Socializing may be difficult for the other person too, so do not take any awkwardness personally. It's more likely that they just don't know how to respond. A conversation is a two-way street. Give the other person room to talk, and they should give you room to talk. It's okay to back off. If you're running out of things to say or the person is leaving you scratching your head on how to respond, it's okay to not say anything at all. Is there something you would like to see a guide for? Reply to this topic with your request! Have something you need advice on? Contact me privately and I'll respond to it in my blog!
    1 point
  48. What is BBCode? Well, without getting all technical (because honestly I don't understand that part of it), BBCode is a dumbed down version of HTML that lets admins let their members fancy up their posts without also letting them get up to no good and install bad scripts. In other words, BBCode gives you a few wonderful options without giving you the entire list of HTML codes to work from. Nifty, right? Clear as mud, right? Thankfully, you don't really need to know what BBCode is to use it. Otherwise, you'd need a whole other guide from someone far more knowledgeable than me. How do you use BBCode? DF and other sites with upgraded software have a rich text editor that means you don't need to worry about all that ugly code because you can just click a button and et voilé, your text is pretty. Older sites (like the ever-popular JCINK) don't have that option so you have to use the tags. You've probably seen a bunch of <HTML> tags knocking around in your travels, and might even have used them yourself if you've installed skins or whatnot (and if you're a coder yourself, I have to wonder what you're doing here, unless you're here to judge my tutorial skills, in which case leave me alooooooone you big meanie). BBCode is a lot like HTML in the way that it isn't really like HTML at all. To use BBCode, you surround the content you want to style (eg. "does my butt look big in this") with BBCode tags. With the exception of link tags (because they're speshul snowflakes), every BBCode needs an OPEN and a CLOSE, and the tags are enclosed in square brackets [ ]. Like this: [open] [/close] (And no, there are no cookies for the Harry Potter reference because I ate them all.) The brackets [ ] tell your browser "yo dude, it's clobbering coding time" so it can read the next bit as instruction rather than content. The forward slash / in the last tag tells your browser "oh hey, I'm done with the coding stuff, you can go back to your regularly scheduled awesome". The full BBCode should then look something like this: [b]This text will be bold.[/b] What can BBCode do? BBCode (and any code, really) is basically just an instruction so your browser knows what you want it to do. BBCode keeps these instructions very bare-bones (unless you add a ton of customs) and (usually) only affects the text, but there's still a nifty list of things you can do. You'll notice that for the most commonly used, the tag inside the square bracket is made up of the initial of the style effect: [b]Bold[/b] [i]Italic[/i] [u]Underline[/u] [s]Strike-through[/s] You can also do the following: Make a link (see Links below) Insert an image (see Images below) Align your text left, center, right (see Alignment below) Change the font type (see Fonts below) Change the font size (see Fonts below) Change the font colour (see Fonts below) AND you can combine them for super mega spectacular spiffy overkill awesome!!!! (see Super Mega Spectacular Spiffy Overkill Awesome at the bottom) Links The tag for links is . You can use that as it is to actually show the full link : [b][i] [url]http://distant-fantasies-net[/url][/i][/b] which will give you an active link like this: http://distant-fantasies-net, or you can use the option within the tag to pretty your links up instead: [b][i] [url=http://distant-fantasies-net]Distant Fantasies[/url] [/i][/b] which will give you a neater Distant Fantasies. Images You can add images the same way you use the first tag: [b][i] [img=http://images.distant-fantasies.net/public/style_emoticons/default/asmile15.png] [/i][/b] That particular link will give you a kiss! But you can use anything, really, so long as it's an image file and it's hosted somewhere on the internet. Alignment Do you want a title for your post? Are you writing a traditional format letter? Well, with alignment, you can! NOTE: There are two schools of "thought" among the makers of forum software. On the one hand, you have places like IPB (on which DF is built) and Proboards, which use the simple style. On the other hand, you've got places like JCINK and... JCINK... who use the more complicated style. (I'm sure other forum softwares do too, I just can't think of any.) Simple Style alignment tags are: [b][i] [center] Text goes here [/center] [left] Text [/left] [right] Text [/right][/i][/b] That's all! It's just like using the bold, italic and underline tags. Complicated Style isn't really that complicated, it just means more typing: [b][i] [align=center] Text goes here [/align] [align=left] Text [/align] [align=right] Text [/align][/i][/b] Whichever you (have to) use, you can do nifty things like this: Fonts You can also change your font type, colour, and size if you don't like the site's default (especially useful if the site's default is 8px Comic Sans). [b][i] [font=Verdana] Teeeeeext [/font] [color=purple] Purple text is purple [/color] [size=12] HUUUUUUUGE [/size] [/i][/b] NOTE: The style of size depends on the forum software again. Some have x-small or xx-small or xx-large, etc, while some start at 0 and work up to 7, or even go into double digits. I've used 12 in this case, but you'll need to check with your chosen forum for actual "numbers". To change the font colour, you can use either colour names (like purple or goldenrod, for which you can find a list here on Wikipedia, along with HTML and CSS and various other comparisons) or you can use hex or RGBA codes instead (though I don't recommend using codes if you're going to change the font colour on a regular basis because "#DC143C" is much harder to remember than "crimson"). Super Mega Spectacular Spiffy Overkill Awesome You can combine BBCode tags the same way you can combine HTML and...other things that can be combined! [center][b][u][size=24][font=courier new]Super Mega Spectacular Spiffy Overkill Awesome!!![/font][/size][/b][/center] which would give you: Super Mega Spectacular Spiffy Overkill Awesome Pretty great for a title, huh? Congratulations! You are now the proud owner of new knowledge and a toolbox of nifty tricks! Don't abuse it. (Seriously. Rainbows are funny in out-of-character posts but not in IC ones.) Go forth and make me proud! :D
    1 point
  49. What's Popular I don't worry about this, personally. I know what *I* like and I know what I like making, so that's all I really focus on. Obviously, if I'm doing a request or challenge or aiming for something specific, I'll be more open to things I don't normally code for, and I do like to experiment so I'm not stuck in a rut, but I'm not really interested in jumping on band wagons. (Seriously, they're too fast for me to chase them down.) Tips Mockery -- as in, mock-ups. So many mock-ups. I always, always, ALWAYS design a skin in Photoshop first. (Well, I say always, but it used to be Paint Shop Pro before Corel got uppity.) I never start actual coding until I have a map first (though I often do take side roads and frequently end up in a different pub than intended). I normally start out with a 1440x960 (980? I forget the specific resolution) canvas, then add guides for the different resolutions (1220x960, 800x600, etc) plus for the header space. (800x300 is the max I normally use for actual banners, but I just made a couple of skins where the banner is actually the background of the main wrapper so it stretches much further down. I don't think of those as banners, though.) With these guides in place, I know what space I've got to work with. I like to play with the full 1440 available to me, but I also try to make sure the actual working parts of a layout (the forum content) is within the smaller areas so people with smaller screens can still use it. (Guides are generally just black fill turned to varying degrees of transparent.) Use the JCINK default skin CSS (or the IF one) as a foundation. A lot of what I do is just going through that thing so I don't forget stuff (though I always forget to do pagination tabs. Ugh). Borrow from yourself! Don't start from scratch on an element you've already written. (For instance, if you move the userlinks someplace else, like I did with my recent Fear the Reaper skin, you can borrow that code for another skin and touch it up to match rather than figuring it all out again.) Skinning is actually a lot of numbers and mathematics (too much for my poor brain, sometimes) so keep a calculator handy. It's easier to figuring out where div.hats should go if you can factor in padding and margins (padding: 10px; plus margin: 10px; plus go down about 100px; equals heck if I know, where's that calculator app). GET WEB DEVELOPER (for Firefox. I think it's available for Chrome too, but I don't know for sure.) With this add-on, you can identify the names of all the elements you're trying to style (because JCINK's default CSS isn't annotated and doesn't always make sense). This add-on makes things so much easier! Un-maximise your window periodically to make sure you haven't used up too much of your "working canvas". Practise, practise, practise (or is it practice?)! When I was first learning, I made so many neopets layouts I thought I was going to bleed skeiths, but it's the best way to really ingrain what a div is (if you don't already know) and become familiar with how all the different elements work together (which ultimately helps with trouble-shooting because you can't fix a broken div if you don't know how float works). Start small! If you're making skins to learn (as opposed to making usable ones while you learn), just stick with colours for now and move on to patterns and textures as backgrounds later. It's much harder putting images together in an eye-pleasing way than it is to get a palette that works well -- and at the learning stage, you shouldn't be worrying too much about the art of a layout so much as if it works. That said, do something that makes you happy. I've abandoned layouts before because they were fugly and there's no point in clawing my eyes out over something even I don't want to use. The skins I made for EF were always, first and foremost, designed to please me. That the members enjoyed the skins I made was just gravy, really. (Reduced-salt thick yummy chicken Bisto gravy.) This is why I've abandoned my Proboards skins, btw. PB and I just really don't get along. I'm tired of wrangling the kids while he trots off to see the world so I just threw up my hands and dumped the kids with his grandma. So, actually, count this as another tip: don't struggle with something if you're not enjoying it. I try different forum software from time to time just so I don't get complacent, and there's something appealing about wrastling with the big boys (like IPB), but there's a reason I tend to default to JCINK (I skin to relax, not so I'll be bald before I'm 40) and there's no shame in that -- especially while you're just starting out. (I say this because there's a lot of ridiculous shaming going on these days for JCINK skinners and I think that's so ridiculous I've now said ridiculous three times in one sentence.) Start simple! Don't worry about fading stuff out and making things hover if you don't yet know how to position a logo where you want it. (On the other hand, some of the things I've learned about skinning are because I wanted to learn how to do this one thing that looked really awesome on this one site so I set out to learn that one thing even though I was still floundering with the basics. Incentive is a great motivator.) ANNOTATE YOUR CSS. ANNOTATE YOUR BOARD WRAPPERS. ANNOTATE YOUR FACE. ANNOTATE EVERYTHING. You don't want to come back to your skin in three days, after a Baileys-and-reindeer bender (*eyebrow waggle*) and not remember what #blargh { this: element (sucks); } is supposed to do (especially if it's written on your actual skin because of said bender). To annotate (put comments in) CSS, you do it like this: /* This is a comment! Your browser can't read this. For some reason, the stroke and asterisk symbols make your browser BLIND!!! I don't really understand why, but who am I to mock invisibility cloaks? */ (If your comment stretches over multiple lines, you should really have a /* and a */ enclosing each line. However, the JCINK default CSS has this at the very top and the browsers can't see it (because of invisibility cloaks), so whatever. /*=============================================== * * Jcink.com Forum Hosting Stylesheet * ============================================== * #Version: 1.0.0 *=============================================== */ Don't be afraid to experiment. Don't think that the banner has to be centred at the top and a dead rectangle. Don't think you have to have the submenu links (home, help, search) under the banner (or at all, for that matter). So long as all the necessary bits (and the copyright) are intact and usable, you can pretty much do whatever the heck you want with your JCINK. (Except blinding orange. Please no blinding on the orange). Don't be afraid to ask. I have an elf trapped in a bottle a friend that I make vet my skins. The fact he's a not-very-feminine guy helps stop me from turning everything pink and frou frou. He's also a nice ego boost when I'm starting to hate the skin I'm working on (or myself for thinking "oh my god that looks like puke" would work as a colour scheme). If you're not sure how to do something (or if you should do something), bang on some drums and scream like a Banshee. Someone's bound to get curious sooner or later and offer their advice in exchange for cookies (the gooey kind. I don't like breaking my teeth on the crunchy kind). ;D Use % and/or em whenever possible. You don't have to make layouts that are completely fluid (as in, stretch to fit your browser no matter how big or small your screen size), but it's a good idea to make sure your font size stays big enough to read no matter what. 12px Arial is going to be really, stupidly tiny on some screens, but 1em will make your font go to the gym and pump up to look the same on any screen. For that matter, don't get stupid about font sizes to begin with. 8px Arial might look cute to you, but you don't want your users to wind up needing glasses. They're liable to charge you for it and specs are expensive. Make sure your skin is legible and usable!! You could have the best looking layout in the world, but if you can't actually click on links because that awesome gradient overlay is blocking your mouse (*cough*like I accidentally did with the first version of my Gossamer&Lace*cough*), your site's going to die pretty quick. To that end, TEST TEST TEST. I never release a skin until I've clicked on pretty much every link I can get my hands on -- and even then, I still forget stuff (those thrice-damned pagination links, ugh). If you can install your layout on a working site, all the better! (When I was running my own site, I'd have skins in the making for months that only I could see and use, and 100% guaranteed I'd find something I'd missed or that needed fixing just before I released it to my members.) If you're using a test board rather than a working site, pretend you're an elephant trying to stomp on a mouse and crash around until you break stuff. You'll thank me later when you don't have to deal with an outcry of "but where's my pretty signature gone!?" TL:DR; Start with mock-ups before you begin with the actual coding. It'll make your life SO much simpler. Resources So many. Seriously, it's hard to really point you in any one direction. JCINK and InvisionFree both have their own support forums, and there are tons more dedicated to skinning for them. Mostly, though, I just Google whatever I'm struggling with. "list-style-type background images". "box-shadow" (that's a new one on me! but it's so cool I'm kind of overusing it now. Is there a limit on how often you can box-shadow something?) "How to get wine stains out of your forum". You're often just as likely to get help from a general CSS tutorial as you are from a JCINK or forum-specific tutorial. That said, there was a guide for IF at one point that took you step-by-step through skinning an IF board. It was basically a checklist (which is a good idea to have. I need to give myself one of those, actually, I always forget something *cough*pagination*cough*). I can't find it on a quick google-glance, but it might help you (if you can find it). But, yeah, resources really depend on what element you're looking for help with. For instance, Max Design has a bunch of tuts specifically for making lists.
    1 point
  50. FLY ME TO THE MOON We will be making this blend: Fly Me To The Moon, which I made for the one-model Challenge. Resources: stock1 (d/ed from google); stock2 (littledevil); stock3 (littledevil); model1 (Aimee model pack) Texture1 (ghislaine) ; Texture2 (inconditionally @DA); Texture3 (evey!); Texture4 (I don’t know, I couldn’t find it, so I pulled it off my graphic. If it’s yours, tell me!) Start with an all black canvas. Mine is 800x600. Cut your model (I recommend hardcutting, you can blend her in later) and place her in the middle-ish of the canvas. Take texture 1 and desaturate and then place on the canvas behind the model @51% opacity. Then take stock one, hard cut, and place behind the model, positioning the wings as you like. Set the layer to Luminosity @100% opacity. The next three layers will go between the butterfly and the texture. Take stock2 and paste onto canvas. Set to difference and then take your eraser, make it large and set it to about 5% opacity and get to erasing. Do a lot of erasing. It should look like this when you’re done. Then place texture2 on the canvas and set to color, then add stock3 and place on screen @52% opacity. Blend the same as described above. Everything else will now go over the top of the model. Take layer2, the butterfly, and duplicate, rotate and move to place the wing over the model. Leave on luminosity. Take texture3 and add to canvas, set on color dodge @18% opacity. Erase the part over her face. Duplicate this layer, then change the settings to overlay @53% opacity. Duplicate layer7 (the color layer) and move the new layer to the very top. Set this @81% opacity. Then lightly erase over the face until the coloring looks ok. Finally take texture4 and set to softlight @87% opacity. Here you are: Now it’s time for coloring. Brightness/Contrast Brightness: +13 Contrast: +10 Color Balance Midtones: -8, -3, -10 Highlights: -6, +9, -7 Shadows: +15, -7, +15 Gradient Map #d89b08 to #f37427 Curves Add the following points: RGB: Input: 43, Output 68; Input:140, Output: 238; Red: Input: 27, Output 24; Input:190, Output: 208; Green: Input: 33, Output 21; Input:188, Output: 288; Blue: Input: 73, Output 39; Selective Color Reds: -11, -12, -64, +7 Yellows: -37, +16, +19, +20 Neutrals: -14, +13, 0, +13 Gradient Fill Bottom to Top #000000 to #FFFFFF After that, I merged all layers into a brand new layer and ran a topaz clean, didn’t change any settings, then set the topaz layer to 37% opacity Text is sylfaen 12pt for the small and Baroque Script 54pt for the large, with a gradient applied and drop shadow. Any questions? let me know! Let’s see what you can do, post them here! Remember to be creative! <3
    1 point
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use, Guidelines and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.