How to give users more way to earn money?

Forum
Last Post
Threads / Messages

Skaiya

Member
Member
Joined
Mar 28, 2014
Messages
40
Points
0
Location
Netherlands
Mysidian Dollar
4,393
How to give users more ways to earn money?

I was thinking about a 'Jobs' page.

They can click on a button from time to time to earn some extra money?
Or is it only possible to earn money through the daycare?
I don't want people to earn a lot with clicking eggs.
But I don't want people to end up poorly without any money to buy the expensive stuff.

Just to add more to my website, if this is ridiculous I'd like to know about that too.
 
Last edited:
There's always the itemdrop mod. They get items for clicking creatures, and they can then sell them.

Um...you can give out a promocode for free items.
 
It's possible, "Giving money" is just an update to the database. It requires some understanding of php. I can guide you through all steps, please tell me if you didn't understand, I don't explain stuff well.

1) Create a new page, by creating two .php files (it's how you create a yoursite.com/pagename instead of a yoursite.com/pages/view/pagesname):
  • One jobs.php (in the main folder together with myadopts.php) and a jobsview.php inside the view folder.
  • Copy the contents of a file in the same folder to see how pages are done, changing the class name (to JobsController and JobsView, it will throw an error when visiting the page if you did the controller and view wrong) and deleting all other functions, except __construct and index.
  • You can delete the contents of index except for

PHP:
$mysidia = Registry::get("mysidia");
		$document = $this->document;		
        $document->setTitle("document title here");

In the jobsview.php.

2) If you go to yourwebsite.com/jobs the page should exist now. This is how the two files work as a page:
  • Usually the visuals of the page go inside the jobsview.php file and the verifications inside the jobs.php. But you can do everything in one file if you want, and ignore the other and it will still work. It's just a way used to separate what is viewed by the user and what isn't.
  • For example, the contents and text would go in jobsview.php and the database modifications in the jobs.php.
  • __construct is a function you can ignore, it basically "creates" your page using the definitions of the parent page/class (controller or view). Index() works as the main page (yourwebsite.com/jobs). If you create a function (on both files jobsview.php and jobs.php and the document set up like the code above!) called example(), it would create a page yourwebsite.com/jobs/example.

3) To add text to the page you do this:
$document->add(new Comment("content that can have html as well."));
If you want to respect the View-Controller, this would be done in the view. If you check the page yourwebsite.com/jobs, the text should be there

4) Now, we need something for the user to click to request money. Like a button saying "Work!".
However, in order to submit something, to send information somewhere, a "trigger" needs to exist. So we attach the button to a Form. Forms can have multiple elements to request information from the user (textfields, radio buttons...) and then a nice button in order to send the form with the information. In this case, a form with a single with a button is enough, since you just want a little button to send money. Users click and money is sent.

To add a form with a button to the page you do this:
PHP:
$form = new Form("form name", "", "post");//create a form
$form->add(new Button("button text", "submit", "submit"));//this adds a button to the form
$document->add($form);//add the form to the document so it shows on the page

After adding this button to the page, clicking will submit but nothing will happen. We need the actual database modification.

5) This part needs some understanding of if conditions in programming and scope. To check if the button submitted, you add this to the page:

PHP:
if($mysidia->input->post("submit"))//if button submits
{
//whatever is inside these curly brackets will happen if the condition above is true
//try to add some text here, then click the button to see the text appear
}

6) Now, what do you want to do when to do when the button submits? Give money!

PHP:
if($mysidia->input->post("submit"))//if button submits
{
    $mysidia->user->changecash(moneyToAdd);//change moneyToAdd to the amount of money you want the user to get when he clicks the button
}
If you want the money to be random instead:

PHP:
if($mysidia->input->post("submit"))//if button submits
{
    $money = rand(minimumValue,maximumValue);//the random value to add to the money of the user will be between the values you put in minimumValue and maximumValue
    $mysidia->user->changecash($money);
}

7) If you want it to have a time limit, you need to modify the database in order to save the user's last time requesting money. In this case I will use once per day.

Open the database with phpMyAdmin or whatever infertace used to facilitate the control of the database. You will see multiple tables. In the (prefixYouChose)_users, add a new column called lastWorkTime for example, with a type varchar, size 20, can be null and the predefined value for when it's null is NULL (if it asks you for that). Usually you go in structure and then there must be a place to add a column to the table.

Everyone should have that column set to null now. Open the file class_member.php and add the new variable you created to the top next to other ones. Below __construct() create a function to check the user's last time working and another to update this time.

PHP:
public lastWorkTime;
//(__construct here)

//function to check if he can work today
public function canWork(){

    $dateTime = new DateTime;
    $todayDate = $dateTime->format('Y-m-d');//gettime

if($this->lastWorkTime != $todayDate)
{
     //if the date user last worked is different from today's date, then it means he hasn't worked today yet!
     return true;//say he can work by returning true
}
else
{
    //if the condition above doesn't apply, we will say he can't work, by returning false
    return false;
}

//function to update last time working on the database
public function updateWorkingDate()
{
       $mysidia = Registry::get("mysidia");
    $dateTime = new DateTime;
    $todayDate = $dateTime->format('Y-m-d');//gettime
       if($this->lastWorkTime != $todayDate)
       {
            $this->lastWorkTime = $todayDate;
            $mysidia->db->update("users",array("lastWorkTime" => $this->lastWorkTime),"uid = {$this->uid}");
        }
}

And then on the page we were working on previously, jobsview.php.

PHP:
//form,button,text...here
if($mysidia->input->post("submit"))//if button submits
{
    if($mysidia->user->canWork())
    {
        $money = rand(minimumValue,maximumValue);
         $mysidia->user->changecash($money);
         $mysidia->user->updateWorkingDate();
     }
}
 
Oh item drop sound nice too. I like that idea.

Actually I understood all your steps perfectly, I will try this as soon as possible. It pretty much sounds how I want it to be.

//edit:

So far it works.
 
Last edited:
Is there a possibility to add more jobs?
Or can I only add one?

Also, how do you disable the button after it's clicked?
I looked on google but that didn't make me smarter.
 
Last edited:
Does the button need to be disabled if the database checks and only gives money once a day? You shouldn't need to.

IntoRain, I love this mod! You should make a thread for it.
 
Does the button need to be disabled if the database checks and only gives money once a day? You shouldn't need to.

IntoRain, I love this mod! You should make a thread for it.

I had people complaining that they were clicking it too much and not noticing it only gave money once, even though I said so on the page.
 
Maybe add a blurb to the else clause?
You have already claimed your daily paycheck. Come back tomorrow for another!
 
This sounds like a very cool script! I hope this will be expanded upon a little bit, kuz I think this is what Mysidia is about. Helping creatures to grow, and also giving incentives for people to keep coming back. This makes people want to come back for more, and I'd highly recommend working on this further to make it into an actual extension of Mysidia :3
 
Glad to see it working! ^^ To add more, the "simplest" but kinda tiring process would be to repeat the very same but by creating more buttons, and more columns in the database and more similar functions to match. I will try to make a more easily editable version and a little better coded, once I have a bit of time available to write it x.x

Thank you guys for the support! ^^ I have a mod ready I'd like to post first, but I will try to improve and post this one asap!

Regarding the button, you'd have to use jQuery to disable it I believe(http://stackoverflow.com/questions/1594952/jquery-disable-enable-submit-button). A way to go around mysidia's hate on javascript, is to add the script inside a Comment(""), inclusing the addition of the jQuery link, works great.

If you don't want to show the button at all:

PHP:
if($mysidia->input->post("submit"))//if button submits 
{ 
    if($mysidia->user->canWork()) 
    { 
        ...
     } 
    else{
        //they can't work, put a message here?
     }

}
else//before user clicks button
{
//whatever text and button you had outside here
}

OR Putting a return inside the outside if, for when the button submits, also cancels anything that happens after it:

PHP:
if($mysidia->input->post("submit"))//if button submits 
{ 
    if($mysidia->user->canWork()) 
    { 
        ...
     } 
    else{
        //they can't work, put a message here?
     }

    return;//this ends the function, nothing after this will make it to the page
}
//rest of the text and button you had
 
IntoRain, is there a way to set it to specific times? Either a time period (ex: April only) or very specific dates (ex: April 5th)?
 
In the canWork() function, instead of working with the last time user worked, you'd compare today's date to the date you wanted.

PHP:
//get today's date, format returns the date in the specified format. m means month and d is day. So 'm-d' means 'month-day' format

$dateToday = new DateTime;
$dateTime = $dateToday->format('m');//get the month only for example

//compare with the month we want
if($dateTime != '04')
{
//it's not april yet, can't work
}
else{
//it's april, can work
}

//or for month-day
$dateToday = new DateTime;
$dateTime = $dateToday->format('m-d');//get the month only for example

//compare with the month we want
if($dateTime != '04-15')
{
//it's not april 15 yet, can't work
}
else{
//it's april 15, can work
}
 
umm a job system, its actually a very interesting idea I must say. I used to think about it in my head before, but its quite difficult to visualize how you can 'work' in an virtual world compared to real world where you just submit your resume and get a job offer. Staff can be programmed to earn wages on weekly or monthly basis, but for most members it's still hard to figure out what kind of jobs they can do.
 
For an example on a type of "Job" Mod, see Zarath's Job Mod for Phpbb2.

I think the Job feature is best suited for quests. Like on Neopets, where they have fairy quests, and they go get the item they need, which they give and get a reward.
 
On 1.3.3 I was doing a job mod that was more like a class system, different jobs would get adoptable-related advantages and could then earn money by selling their adoptables or items created/made in a market, in their own shop.

I think here the idea is to have multiple descriptions of things that need to be done (like "This room is a mess, help me sort it out?" or "Can you bring me some flowers?", so like Miki said, quest-like stuff that might ask for items or not
 
Thank you IntoRain! Oh, that's a great idea HOF! It would be great not to have to manually dispense wages for staff.
 
Thanks Squiggler. I like the idea of automatically generating wages for staff, but the issue is that most people are still 'unemployed', how are they supposed to make money. The best solution is when an exploration system becomes available with a quest-like feature that users can post or accept quests/jobs to earn money. It will take a long time for the script to get there though, as the exploration system is planned for Mys v1.6.0. Before that, the battle system needs to be there.
 
Thanks Squiggler. I like the idea of automatically generating wages for staff, but the issue is that most people are still 'unemployed', how are they supposed to make money. The best solution is when an exploration system becomes available with a quest-like feature that users can post or accept quests/jobs to earn money. It will take a long time for the script to get there though, as the exploration system is planned for Mys v1.6.0. Before that, the battle system needs to be there.

On the system I was building, there were Alchemists, Merchants and Breeders (only the alchemists and merchants were functional). They would make money out of selling their goods (goods their class could create) instead of receiving consistent money (I didn't actually remember about that, but they could as well maybe?). But building a job system like that is more site-related and maybe not everyone would want it, I was just doing it out of curiosity. So staff and normal members had jobs.
The quest system would work out better like you said, and it's quite an interesting feature I wouldn't mind helping out with if you need a hand!
 
I think what people want is like 'daily job quests' when your task is to, like... find a specific but random item for an NPC and exchange it for a reward beyond that of the normal sell-back rate. Or just show up and get a free item/amount of currency. Or talk to three other NPCs for another NPC. Pass out fictional deliveries to fictional characters.

I would definitely like to see a full out quest system, but perhaps the focus should be more on making it a mod rather than part of the framework itself.
 
I think what people want is like 'daily job quests' when your task is to, like... find a specific but random item for an NPC and exchange it for a reward beyond that of the normal sell-back rate. Or just show up and get a free item/amount of currency. Or talk to three other NPCs for another NPC. Pass out fictional deliveries to fictional characters.

I would definitely like to see a full out quest system, but perhaps the focus should be more on making it a mod rather than part of the framework itself.

This. This right here. I think I suggested this in the Suggestions but I don't remember.

That's what I'd love for my site! A simple daily quest feature exactly how you explained it! A member would go to the Quests page, and an NPC would give them a daily quest randomly picked from a list or something that day.

"Bring me 10 worms, 2 grasshoppers, and a fishing line." If the person has it in their inventory, they can click a button that says Complete Quest and get EXP and Moneys! c: Maybe certain quests give an adoptable or a rare item.
 

Similar threads

Users who are viewing this thread

  • Forum Contains New Posts
  • Forum Contains No New Posts

Forum statistics

Threads
4,277
Messages
33,122
Members
1,602
Latest member
BerrieMilk
BETA

Latest Threads

Latest Posts

Top