mud/lib/secure/modules/money.c
2020-09-06 05:43:07 -07:00

106 lines
3.5 KiB
C

#include <lib.h>
#include <dirs.h>
#include <daemons.h>
#include <modules.h>
#include <commands.h>
#include ROOMS_H
string globalstr, globalstr2, globalstr3, globaltmp;
mapping TmpMap = ([]);
mapping LoadMap = ([]);
int eventModCost(object ob, string type, mixed val);
int eventModMoney(object ob, string type, mixed val){
string junk1;
int amount, npc;
mapping NewMap;
TmpMap = ([]);
NewMap = ([]);
LoadMap = ([]);
globalstr = "";
globalstr2 = "";
globalstr3 = "";
if(inherits(LIB_NPC,ob)) npc = 1;
if(!intp(val) ) sscanf(val,"%s %d",junk1,amount);
if(amount) val = amount;
else val = 0;
amount = 0;
globalstr3 = base_name(ob)+".c";
globalstr = generate_tmp(ob);
unguarded( (: cp(globalstr3, globalstr) :) );
if(!check_privs(this_player(),globalstr3)){
write("You do not appear to have write access to this file. Modification aborted.");
return 1;
}
if(npc){
unguarded( (: TmpMap = this_object()->eventMappifyLine(globalstr,"SetCurrency") :) );
LoadMap = this_object()->eventParsePair(globalstr,"AddCurrency","string","literal");
foreach(string foo, mixed bar in LoadMap) if(stringp(bar)) LoadMap[foo] = amount;
unguarded( (: globaltmp = remove_matching_line(globalstr,"AddCurrency",1) :) );
unguarded( (: globaltmp = remove_matching_line(globaltmp,"SetCurrency",1) :) );
globalstr2 = "SetCurrency( ";
NewMap = add_maps(LoadMap,TmpMap);
}
else {
unguarded( (: TmpMap = this_object()->eventMappifyLine(globalstr,"SetMoney") :) );
LoadMap = this_object()->eventParsePair(globalstr,"AddMoney","string","literal");
foreach(string foo, mixed bar in LoadMap) if(stringp(bar)) LoadMap[foo] = amount;
unguarded( (: globaltmp = remove_matching_line(globalstr,"AddMoney",1) :) );
unguarded( (: globaltmp = remove_matching_line(globaltmp,"SetMoney",1) :) );
globalstr2 = "SetMoney( ";
NewMap = add_maps(copy(LoadMap),copy(TmpMap));
}
if(stringp(val)) val = amount;
NewMap[type] = val;
globalstr2 += this_object()->eventStringifyMap(NewMap) + " );";
globaltmp = this_object()->eventAppend(read_file(globaltmp),({"SetItems","SetInventory","SetLong"}),"\n"+globalstr2+"\n");
unguarded( (: write_file(globalstr,globaltmp,1) :) );
this_object()->eventGeneralStuff(globalstr);
unguarded( (: cp(globalstr,globalstr3) :) );
unguarded( (: rm(globalstr) :) );
reload(ob);
return 1;
}
int eventModCost(object ob, string type, mixed val){
string new_line, junk;
int amount;
if(stringp(val)) sscanf(val,"%s %d",junk,amount);
else amount = val;
globalstr = base_name(ob)+".c";
if(!check_privs(this_player(),globalstr)){
write("You do not appear to have write access to this file. Modification aborted.");
return 1;
}
unguarded( (: globalstr2 = read_file(globalstr) :) );
globalstr2 = remove_matching_line(globalstr2,"SetBaseCost",1);
globalstr2 = remove_matching_line(globalstr2,"SetDollarCost",1);
globalstr2 = remove_matching_line(globalstr2,"SetCost",1);
globalstr2 = remove_matching_line(globalstr2,"SetValue",1);
if(!type) type = "silver";
new_line = "SetBaseCost(\""+type+"\", "+amount+");";
globalstr2 = this_object()->eventAppend(globalstr2,({"SetMass","SetItems","SetLong","SetInventory","SetVendorType"}), "\n"+new_line+"\n");
unguarded( (: write_file(globalstr, globalstr2, 1) :) );
this_object()->eventGeneralStuff(globalstr);
reload(ob);
return 1;
}