/* vi: set ts=4 sw=4 ai: */ /* * money.c * * Lotos v1.2.3 : (c) 1999-2003 Pavol Hluchy (Lopo) * last update : 30.1.2003 * email : lotos@losys.sk * homepage : lotos.losys.sk */ #ifndef __MONEY_C__ #define __MONEY_C__ 1 #include <stdlib.h> #include <string.h> #include <ctype.h> #include "define.h" #include "prototypes.h" #include "obj_ur.h" #include "obj_sys.h" #include "money.h" /* give some cash to another user */ void donate_cash(UR_OBJECT user) { UR_OBJECT u; int cash; char *name; set_crash(); if (word_count<3) { write_usage(user,"donate <user> <amount>"); return; } word[1][0]=toupper(word[1][0]); if (!(u=get_user_name(user,word[1]))) { write_user(user,notloggedon); return; } if (u==user) { write_user(user,"You cannot donate money to yourself.\n"); return; } cash=atoi(word[2]); if (cash>MAX_DONATION) { write_user(user,"You cannot donate more than $5000.\n"); return; } if (cash<0) { write_user(user,"Now don't be trying to steal money from them!\n"); return; } if (!cash) { write_user(user,"If you're going to donate money, at least donate something!\n"); return; } if (user->money<cash) { write_user(user,"You have not got that much money on you right now.\n"); return; } u->money+=cash; user->money-=cash; if (user->vis || u->level<WIZ) name=user->recap; else name=invisname; vwrite_user(user,"You donate $%d out of your own pocket to %s~RS.\n",cash,u->recap); vwrite_user(u,"%s~RS donates $%d to you out of their own pocket.\n",name,cash); sprintf(text,"%s donates $%d.\n",user->name,cash); add_history(u->name,1,text); } /* show the user how much money they have */ void show_money(UR_OBJECT user) { set_crash(); if (!user->money) { write_user(user,"You do not have any money on your right now.\n"); return; } vwrite_user(user,"You currently have ~OL~FT$%d~RS on you.\n",user->money); } /** Add in the credits system **/ void check_credit_updates(void) { UR_OBJECT u=user_first,next; set_crash(); while (u!=NULL) { next=u->next; /* only update credits for users who qualify */ if (u->level<MIN_CREDIT_UPDATE_LEVEL || u->afk || u->login || (int)(time(0)-u->last_input)>=amsys->user_idle_time) return; u->inctime+=amsys->heartbeat; /* work out how many credits per hour */ if (!(u->inctime%(int)(3600/CREDITS_PER_HOUR))) { u->inctime=0; u->money++; } u=next; } } /* give, take and view money of users currently logged on */ void global_money(UR_OBJECT user) { UR_OBJECT u; int cash,x=0,user_cnt=0; char *name,text2[ARR_SIZE]; set_crash(); text2[0]='\0'; if (word_count<2) { write_usage(user,"money -l/-g/-t [<user> <amount>]"); return; } /* list all users online and the amount of cash they have */ if (!strcasecmp(word[1],"-l")) { write_user(user, ascii_tline); write_user(user,"~CT| User money listings |\n"); write_user(user, ascii_line); for (u=user_first;u!=NULL;u=u->next) { ++user_cnt; /* build up first half of the string */ if (!x) { sprintf(text,"~CT|~RS %-13.13s $%6d ",u->name,u->money); ++x; } /* build up full line and print to user */ else if (x==1) { sprintf(text2," %-13.13s $%6d ",u->name,u->money); strcat(text,text2); write_user(user,text); text[0]='\0'; text2[0]='\0'; ++x; } else { sprintf(text2," %-13.13s $%6d ~CT|\n",u->name,u->money); strcat(text,text2); write_user(user,text); text[0]='\0'; text2[0]='\0'; x=0; } } /* end for */ /* If you've only printed first half of the string */ if (x==1) { strcat(text," ~CT|\n"); write_user(user,text); } if (x==2) { strcat(text," ~CT|\n"); write_user(user,text); } write_user(user, ascii_line); sprintf(text,"Total of ~OL%d~RS user%s",user_cnt,PLTEXT_S(user_cnt)); vwrite_user(user,"~CT|~RS %-82s ~CT|\n",text); write_user(user, ascii_bline); return; } /* give money to users */ if (!strcasecmp(word[1],"-g")) { if (word_count<4) { write_usage(user,"money -l/-g/-t [<user> <amount>]"); return; } strtolower(word[2]); word[2][0]=toupper(word[2][0]); if (!(u=get_user_name(user,word[2]))) { write_user(user,notloggedon); return; } if (u==user && user->level<GOD) { write_user(user,"You cannot give money to yourself.\n"); return; } cash=atoi(word[3]); if (!cash || cash<0) { write_user(user,"You must supply an amount to give.\n"); return; } u->money+=cash; if (user->vis || u->level<WIZ) name=user->name; else name=invisname; vwrite_user(user,"You give $%d to %s.\n",cash,u->name); vwrite_user(u,"%s kindly gives $%d.\n",name,cash); sprintf(text,"%s gives $%d.\n",user->name,cash); add_history(u->name,1,text); return; } /* take money from users */ if (!strcasecmp(word[1],"-t")) { if (word_count<4) { write_usage(user,"money -l/-g/-t [<user> <amount>]"); return; } strtolower(word[2]); word[2][0]=toupper(word[2][0]); if (!(u=get_user_name(user,word[2]))) { write_user(user,notloggedon); return; } if (u==user) { write_user(user,"You cannot take money away from yourself.\n"); return; } cash=atoi(word[3]); if (!cash || cash<0) { write_user(user,"You must supply an amount to take.\n"); return; } if (u->money<cash) { vwrite_user(user,"%s has not got that much money.\n"); return; } u->money-=cash; if (user->vis || u->level<WIZ) name=user->name; else name=invisname; vwrite_user(user,"You take $%d from %s.\n",cash,u->name); vwrite_user(u,"%s takes $%d from you.\n",name,cash); sprintf(text,"%s takes $%d.\n",user->name,cash); add_history(u->name,1,text); return; } write_usage(user,"money -l/-g/-t [<user> <amount>]"); } #endif /* __MONEY_C__ */