mud/lib/domains/Praxis/adv_main.c
2020-09-06 05:43:07 -07:00

124 lines
3.8 KiB
C

#include <lib.h>
inherit STD_ROOM;
int get_exp(int lev);
int train_player(object tp, string which, int amount);
int get_stat_cost(int x, int lev);
void create() {
object ob;
::create();
SetProperty("light", 2);
SetProperty("indoors", 1);
SetNoClean(1);
SetShort( "the adventurer's hall");
SetLong(
"This is the adventurer's hall of the town of Praxis. It "
"is a large wooden building which looks worn from all the use "
"over the years. A large bulletin board stands in the center of the "
"room, filled with notes from the many adventurers of this reality. "
"In front of the building Boc La Road runs north of here. To the "
"south is a small passage illuminated by a shimmering "
"%^BLUE%^blue%^RESET%^ light.");
SetExits(
(["north" : "/domains/Praxis/e_boc_la2",
"east" : "/domains/Praxis/lpmud_room",
"south" : "/domains/Praxis/adv_inner",
"down" : "/domains/Praxis/ombud_hall"]) );
SetItems(
(["hall" : "A place for a rowdy time!",
"road" : "A small dirt path going through Praxis.",
"passage" : "A %^BLUE%^blue%^RESET%^ light illuminates it.",
"light" : "It is probably a force field."]) );
ob = new("/lib/bboard");
ob->SetKeyName("board");
ob->SetId( ({ "board", "bulletin board", "reality board" }) );
ob->set_board_id("main_board");
ob->SetShort("The Nightmare Reality Board");
// ob->SetShort( "The Nightmare Reality Board");
ob->SetLong( "An old cork board where the adventurers "
"who pass through Praxis post information on the "
"reality they have discovered.\n");
ob->set_max_posts(75);
ob->move(this_object());
SetProperty("no steal", 1);
SetProperty("no attack", 1);
}
int go_south() {
if(!creatorp(this_player())) {
write("%^BLUE%^%^BOLD%^You cannot penetrate the force of the blue light.");
say(this_player()->query_cap_name()+" tries to get through the "
"passage, but fails.", this_player());
return 0;
}
return 1;
}
int get_exp(int lev) {
int val;
switch(lev) {
case 0: val = 0; break;
case 1: val = 1014; break;
case 2: val = 2028; break;
case 3: val = 3056; break;
case 4: val = 4800; break;
case 5: val = 6200; break;
case 6: val = 9100; break;
case 7: val = 12500; break;
case 8: val = 15000; break;
case 9: val = 20000; break;
case 10: val = 28000; break;
case 11: val = 40000; break;
case 12: val = 55000; break;
case 13: val = 72000; break;
case 14: val = 104000; break;
case 15: val = 150000; break;
default: val = (lev-12)*(lev-15)*28000 + 150000;
}
return val;
}
int train_player(object tp, string which, int amount) {
int exp, amt;
if(amount < 1) {
notify_fail("You cannot train that amount.\n");
return 0;
}
exp = tp->query_exp();
if(exp-amount < get_exp(tp->query_level())) {
notify_fail("You do not have the experience to train that much.\n");
return 0;
}
if(tp->query_max_skill(which) <= tp->query_skill(which)) {
notify_fail("You can train no more in that skill.\n");
return 0;
}
amt = ( tp->query_level() * 4 ) + 20;
if(amt <= tp->query_skill(which) )
{
notify_fail("You must advance your level to train more in that skill"+
".\n");
return 0;
}
tp->add_skill_points(which, amount/4);
tp->add_exp(-amount);
tell_object(tp, "You train in the skill of "+which+".");
return 1;
}
int get_stat_cost(int x, int lev) {
if(x==1) return ((lev/10)*(lev/10)*10000) + (lev/3)*1000;
else return (lev/7)*(lev/7)*(lev*900);
}
void init(){
::init();
}