#include <sys/types.h>
#include <sys/time.h>
#include <ctype.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h> // we need these to call wait()
#include <execinfo.h> // internal backtraces.
#include "merc.h"
void do_resetspheres(CHAR_DATA * ch, char *argument)
{
if (IS_NPC(ch))
return;
ch->pcsphere = 0;
ch->pcsphereammount = 0;
send_to_char("your spheres have been reset\n\r", ch);
return;
}
void do_wizlist( CHAR_DATA *ch, char *argument )
{
do_help( ch, "wizlist" );
return;
}
const sh_int revdir [6] =
{
2, 3, 0, 1, 5, 4
};
void put_wall(ROOM_INDEX_DATA *room, int dir, int wall)
{
int timer;
timer = dice(2, 2);
if(wall == EX_SHIN_WALL) timer = 30;
switch (dir)
{
case DIR_NORTH :
SET_RTIMER(room, RTIMER_WALL_NORTH, timer);
SET_RTIMER(room->exit[dir]->to_room, RTIMER_WALL_SOUTH, timer);
break;
case DIR_EAST :
SET_RTIMER(room, RTIMER_WALL_EAST, timer);
SET_RTIMER(room->exit[dir]->to_room, RTIMER_WALL_WEST, timer);
break;
case DIR_SOUTH :
SET_RTIMER(room, RTIMER_WALL_SOUTH, timer);
SET_RTIMER(room->exit[dir]->to_room, RTIMER_WALL_NORTH, timer);
break;
case DIR_WEST :
SET_RTIMER(room, RTIMER_WALL_WEST, timer);
SET_RTIMER(room->exit[dir]->to_room, RTIMER_WALL_EAST, timer);
break;
case DIR_UP :
SET_RTIMER(room, RTIMER_WALL_UP, timer);
SET_RTIMER(room->exit[dir]->to_room, RTIMER_WALL_DOWN, timer);
break;
case DIR_DOWN :
SET_RTIMER(room, RTIMER_WALL_DOWN, timer);
SET_RTIMER(room->exit[dir]->to_room, RTIMER_WALL_UP, timer);
break;
}
room->exit[dir]->exit_info = wall;
}
void make_wall(ROOM_INDEX_DATA *room, int dir, int wall)
{
int was;
bool makewall = TRUE;
if (dir < 0 || dir > 5)
{
bug("Invalid direction (create wall)", 0);
return;
}
if (room->exit[dir] == NULL)
{
bug ("Cant make wall!!!!", 0);
return;
}
was = room->exit[dir]->exit_info;
if (was == EX_ICE_WALL && wall == EX_FIRE_WALL)
{
room_message(room, "The wall of ice bursts into flames.");
room_message(room->exit[dir]->to_room, "The wall of ice bursts into flames.");
}
if (was == EX_FIRE_WALL && wall == EX_ICE_WALL)
{
room_message(room, "The wall of flames flickers blue for a second.");
room_message(room->exit[dir]->to_room, "The wall of flames flickers blue for a second.");
makewall = FALSE;
}
if (makewall) put_wall(room, dir, wall);
room->next_update = update_room_list;
update_room_list = room;
if (room->exit[dir]->to_room == NULL)
{
bug("Exit doesnt lead anywhere (create wall).", 0);
return;
}
if (room->exit[dir]->to_room->exit[revdir[dir]] == NULL)
{
bug("Reverse Exit doesnt lead anywhere (create wall).", 0);
return;
}
room->exit[dir]->to_room->next_update = update_room_list;
update_room_list = room->exit[dir]->to_room;
if (makewall) put_wall(room->exit[dir]->to_room, revdir[dir], wall);
}
ROOM_INDEX_DATA * locate_obj (OBJ_DATA *obj)
{
if (obj->in_obj != NULL)
return locate_obj(obj->in_obj);
if (obj->carried_by != NULL)
return obj->carried_by->in_room;
return obj->in_room;
}
void do_powers(CHAR_DATA * ch, char *argument)
{
if (IS_NPC(ch))
return;
send_to_char("[--------------------[Sphere Powers]--------------------]\n\r", ch);
if (IS_SET(ch->pcsphere, SPHERE_PYROMANCER))
{
send_to_char("#R[#0Pyromancer#R]#n Flameblade, Firebreath, Magma, Enflame, Jutsus\n\r", ch);
}
if (IS_SET(ch->pcsphere, SPHERE_HYDROMANCER))
{
send_to_char("#R[#0Hydromancer#R]#n Hydro, Cbreath, Frosthands, Jutsus\n\r", ch);
}
if (IS_SET(ch->pcsphere, SPHERE_ABJURER))
{
send_to_char("#R[#0Abjurer#R]#n DimensionDodge, holyaura, Shield\n\r", ch);
}
if (IS_SET(ch->pcsphere, SPHERE_TRANSMUTER))
{
send_to_char("#R[#0Transmuter#R]#n Zuloform, Change, Dragonform, Mask, Camouflage, Bonemod\n\r", ch);
}
if (IS_SET(ch->pcsphere, SPHERE_ENCHANTMENT))
{
send_to_char("#R[#0Enchantment#R]#n Weaponenhance, Armorenhance, Caust, Immolate, Freezeweapon, Poisonblade\n\r", ch);
}
if (IS_SET(ch->pcsphere, SPHERE_DIVINER))
{
send_to_char("#R[#0Diviner#R]#n Scry, Readaura, Gleam, Rreveal\n\r", ch);
}
if (IS_SET(ch->pcsphere, SPHERE_ILLUSIONIST))
{
send_to_char("#R[#0Illusionist#R]#n Clones, Formillusion, Shadowplane, Shadowsight, Grab\n\r", ch);
}
if (IS_SET(ch->pcsphere, SPHERE_NECROMANCER))
{
send_to_char("#R[#0Necromancer#R]#n Creepingdoom, Fleshportal, Powerword, Darksummon\n\r", ch);
}
if (IS_SET(ch->pcsphere, SPHERE_GEOMANCER))
{
send_to_char("#R[#0Geomancer#R]#n Solidift, Rockslide, Earthshatter, Earthswallow, Jutsus\n\r", ch);
}
if (IS_SET(ch->pcsphere, SPHERE_AEROMANCER))
{
send_to_char("#R[#0Aeromancer#R]#n Disperse, Enfold, Evaporate, Jutsus\n\r", ch);
}
if (IS_SET(ch->pcsphere, SPHERE_WOKANIST))
{
send_to_char("#R[#0Wokanist#R]#n Elemshift, Gasbreath, Naturesfury\n\r", ch);
}
if (IS_SET(ch->pcsphere, SPHERE_ANIMAL))
{
send_to_char("#R[#0Animal#R]#n Claws, Sclaws, Fangs, Rend, Talons, Burrow\n\r", ch);
}
if (IS_SET(ch->pcsphere, SPHERE_HEALING))
{
send_to_char("#R[#0Healing#R]#n Heal, Regenerate, Regrow\n\r", ch);
}
if (IS_SET(ch->pcsphere, SPHERE_ENHANCEMENT))
{
send_to_char("#R[#0Enhancement#R]#n Nightsight, Graft, Darktendrils\n\r", ch);
}
if (IS_SET(ch->pcsphere, SPHERE_CHAOS))
{
send_to_char("#R[#0Chaos#R]#n Chaossurge, Chaosgate, Chaos, Chaosmagic, Chaosshield\n\r", ch);
}
if (IS_SET(ch->pcsphere, SPHERE_COMBAT1))
{
send_to_char("#R[#0Combat1#R]#n Leech, Bladejump, Ironclaw, Kakusu, Fightdance\n\r", ch);
}
if (IS_SET(ch->pcsphere, SPHERE_COMBAT2))
{
send_to_char("#R[#0Combat2#R]#n Bomuzite, Superberserk, Shouldercharge\n\r", ch);
}
if (IS_SET(ch->pcsphere, SPHERE_COMBAT3))
{
send_to_char("#R[#0Combat3#R]#n Entomb, Spikes, Unnerve, Dtrick\n\r", ch);
}
if (IS_SET(ch->pcsphere, SPHERE_COMBAT4))
{
send_to_char("#R[#0Combat4#R]#n Desanc, Shatter, Enrage\n\r", ch);
}
if (IS_SET(ch->pcsphere, SPHERE_ANIMAL2))
{
send_to_char("#R[#0Animal2#R]#n Quills, Roar, Flameclaws, Skin\n\r", ch);
}
if (IS_SET(ch->pcsphere, SPHERE_SHADOW))
{
send_to_char("#R[#0Shadow#R]#n Jutsus\n\r", ch);
}
if (IS_SET(ch->pcsphere, SPHERE_HOLY))
{
send_to_char("#R[#0Holy#R]#n Jutsus\n\r", ch);
}
return;
}
void do_sell(CHAR_DATA * ch, char *argument)
{
ROOM_INDEX_DATA *room;
OBJ_DATA *obj;
OBJ_DATA *obj_next;
bool found;
char arg[MAX_INPUT_LENGTH];
char buf[MAX_STRING_LENGTH];
int value = 0, total = 0, counter = 0;
CHAR_DATA *keeper;
argument = one_argument(argument, arg);
if (IS_NPC(ch))
return;
room = ch->in_room;
if (room == NULL)
return;
for (keeper = ch->in_room->people; keeper; keeper = keeper->next_in_room)
{
{
if (keeper == ch) continue;
if (!keeper->shop_fun) continue;
(*keeper->shop_fun)(keeper, ch, buf);
return;
}
stc("You aren't at a shop.\n\r", ch);
return;
}
if (arg[0] == '\0')
{
stc("Sell what?", ch);
return;
}
if (str_cmp(arg, "all") && str_prefix("all.", arg))
{
if ((obj = get_obj_carry(ch, arg)) == NULL)
{
stc("You don't seem to have that item!\n\r", ch);
return;
}
if (obj->questowner != NULL && strlen(obj->questowner) > 1
&& str_cmp(ch->pcdata->switchname, obj->questowner))
{
stc("You can't sell that! It belongs to someone else!\n\r", ch);
return;
}
/* if (IS_SET(obj->extra_flags2, ITEM_NO_SELL))
{
stc("You are not allowed to sell that item!\n\r", ch);
return;
}
*/
if (obj->cost > 0)
{
if (obj->item_type == ITEM_TREASURE)
{
value = obj->cost;
//value += number_range(obj->cost * 0.1, obj->cost * 0.3);
}
else
{
value = obj->cost / 2;
if (number_range(1, 2) == 2)
value += number_range(value * 0.1,
value * 0.3);
else
value -= number_range(value * 0.1,
value * 0.3);
}
sprintf(buf, "You sell $p for %d gold pieces!",
value);
act(buf, ch, obj, NULL, TO_CHAR);
act("$n sells $p to the shopkeeper!", ch, obj, NULL,
TO_ROOM);
extract_obj(obj);
ch->pcgold += value;
return;
}
else
{
stc("That object is worthless!\n\r", ch);
return;
}
return;
}
else
{
found = FALSE;
for (obj = ch->carrying; obj != NULL; obj = obj_next)
{
obj_next = obj->next_content;
if (arg[3] != '\0' && !is_name(&arg[4], obj->name))
continue;
if (!can_see_obj(ch, obj)
|| obj->wear_loc != WEAR_NONE)
continue;
if (obj->questowner != NULL
&& strlen(obj->questowner) > 1
&& str_cmp(ch->pcdata->switchname,
obj->questowner))
continue;
// if (IS_SET(obj->extra_flags2, ITEM_NO_SELL))
// continue;
if (obj->cost < 1)
continue;
if (obj->item_type == ITEM_TREASURE)
value = obj->cost;
else
{
value = obj->cost / 2;
if (number_range(1, 2) == 2)
value += number_range(value * 0.1,
value * 0.3);
else
value -= number_range(value * 0.1,
value * 0.3);
}
if (value < 1)
value = 1;
total += value;
extract_obj(obj);
found = TRUE;
counter += 1;
}
if (found)
{
if (counter > 1)
{
act("$n sells several items to the shopkeeper!", ch, NULL, NULL, TO_ROOM);
ch->pcgold += total;
act("You sell several items to the shopkeeper!", ch, NULL, NULL, TO_CHAR);
sprintf(buf,
"You make %d gold from your sells!\n\r",
total);
stc(buf, ch);
}
else
{
act("$n sells an item to the shopkeeper!", ch,
NULL, NULL, TO_ROOM);
ch->pcgold += total;
sprintf(buf,
"You sell an item to the shopkeeper for %d gold\n\r!",
total);
act(buf, ch, NULL, NULL, TO_CHAR);
}
}
else
{
stc("Either you don't have them or the shopkeeper doesn't want them.\n\r", ch);
return;
}
}
return;
}
void do_convert ( CHAR_DATA *ch, char *argument) // Recoded by NebuSoft
{
char arg1[MAX_INPUT_LENGTH];
argument = one_argument( argument, arg1);
if (IS_NPC(ch)) return;
if (arg1[0] == '\0' || (str_cmp(arg1,"silver") && str_cmp(arg1,"copper")))
{
send_to_char("convert <silver|copper>\n\r",ch);
return;
}
if (!str_cmp(arg1,"silver"))
{
if ( ch->pcsilver < 20000 )
{
send_to_char("You need at least 20000 silver to convert.\n\r",ch);
return;
}
ch->pcgold += 2000;
ch->pcsilver -= 20000;
send_to_char("You convert 20000 silver into 2000 gold.\n\r",ch);
}
else if (!str_cmp(arg1,"copper"))
{
if ( ch->pccopper < 100000 )
{
send_to_char("You need at least 100,000 copper to convert.\n\r",ch);
return;
}
ch->pccopper -= 100000;
ch->pcgold += 1000;
send_to_char("You convert 100,000 Copper into 1000 gold.\n\r",ch);
}
return;
}
void do_proficiencies(CHAR_DATA * ch, char *argument)
{
char buf[MAX_STRING_LENGTH];
if (IS_NPC(ch))
return;
send_to_char("[--------------------[Proficiencies]--------------------]\n\r", ch);
sprintf( buf, "#0Unarmed #R[#0%d#R] #0Aikido: #R[#0%d#R]#n\n\r#n", ch->wpn[0], ch->pcstyle[1]);
send_to_char( buf, ch );
sprintf( buf, "#0Knife: #R[#0%d#R] #0Jiujitsu: #R[#0%d#R]#n\n\r#n", ch->wpn[1], ch->pcstyle[2]);
send_to_char( buf, ch );
sprintf( buf, "#0Spear: #R[#0%d#R] #0Kendo: #R[#0%d#R]#n\n\r#n", ch->wpn[2], ch->pcstyle[3]);
send_to_char( buf, ch );
sprintf( buf, "#0Shortsword: #R[#0%d#R]\n\r#n", ch->wpn[3]);
send_to_char( buf, ch );
sprintf( buf, "#0Staff: #R[#0%d#R]\n\r#n", ch->wpn[4]);
send_to_char( buf, ch );
sprintf( buf, "#0Broadsword: #R[#0%d#R]\n\r#n", ch->wpn[5]);
send_to_char( buf, ch );
sprintf( buf, "#0Longsword: #R[#0%d#R]\n\r#n", ch->wpn[6]);
send_to_char( buf, ch );
sprintf( buf, "#0Bastard Sword: #R[#0%d#R]\n\r#n", ch->wpn[7]);
send_to_char( buf, ch );
sprintf( buf, "#0Two-Handed Longsword: #R[#0%d#R]\n\r#n", ch->wpn[8]);
send_to_char( buf, ch );
sprintf( buf, "#0Axe: #R[#0%d#R]\n\r#n", ch->wpn[9]);
send_to_char( buf, ch );
sprintf( buf, "#0Mace: #R[#0%d#R]\n\r#n", ch->wpn[10]);
send_to_char( buf, ch );
sprintf( buf, "#0Whip: #R[#0%d#R]\n\r#n", ch->wpn[11]);
send_to_char( buf, ch );
sprintf( buf, "#0Warhammer: #R[#0%d#R]\n\r#n", ch->wpn[12]);
send_to_char( buf, ch );
sprintf( buf, "#0Flail: #R[#0%d#R]\n\r#n", ch->wpn[13]);
send_to_char( buf, ch );
sprintf( buf, "#0Morningstar: #R[#0%d#R]\n\r#n", ch->wpn[14]);
send_to_char( buf, ch );
sprintf( buf, "#0Polearm: #R[#0%d#R]\n\r#n", ch->wpn[15]);
send_to_char( buf, ch );
sprintf( buf, "#0Club: #R[#0%d#R]\n\r#n", ch->wpn[16]);
send_to_char( buf, ch );
sprintf( buf, "#0Sickle: #R[#0%d#R]\n\r#n", ch->wpn[17]);
send_to_char( buf, ch );
sprintf( buf, "#0Dagger: #R[#0%d#R]\n\r#n", ch->wpn[18]);
send_to_char( buf, ch );
send_to_char("[--------------------[Proficiencies]--------------------]\n\r", ch);
return;
}
void improve_str(CHAR_DATA * ch)
{
int dice1;
int dice2;
dice1 = number_percent();
dice2 = number_percent();
if (IS_NPC(ch))
return;
if (ch->pcdata->perm_str >=25) return;
if (dice1 >= 98 || dice2 >= 99)
{
send_to_char("#0Your Strength increases by #R[#0ONE#R]#0 point.#n \n\r",ch);
ch->pcdata->perm_str++;
}
return;
}
void improve_dex(CHAR_DATA * ch)
{
int dice1;
int dice2;
dice1 = number_percent();
dice2 = number_percent();
if (IS_NPC(ch))
return;
if (ch->pcdata->perm_dex >=25) return;
if (dice1 >= 98 || dice2 >= 99)
{
send_to_char("#0Your Dexterity increases by #R[#0ONE#R]#0 point.#n \n\r",ch);
ch->pcdata->perm_dex++;
}
return;
}
void improve_con(CHAR_DATA * ch)
{
int dice1;
int dice2;
dice1 = number_percent();
dice2 = number_percent();
if (IS_NPC(ch))
return;
if (ch->pcdata->perm_con >=25) return;
if (dice1 >= 98 || dice2 >= 99)
{
send_to_char("#0Your Constitution increases by #R[#0ONE#R]#0 point.#n \n\r",ch);
ch->pcdata->perm_con++;
}
return;
}
void do_selfsphere(CHAR_DATA *ch, char *argument)
{
char arg1[MAX_STRING_LENGTH];
argument = one_argument( argument, arg1 );
if (IS_NPC(ch))return;
if (ch->level < 3)
{
send_to_char("#0You must be avatar to selfsphere.#n\n\r",ch);
return;
}
if ( arg1[0] == '\0' )
{
send_to_char("Spheres: Type selfsphere spherename to select a sphere.\n\r\n\r",ch);
send_to_char("Spheres: You only get 5 so choose wisely.\n\r\n\r",ch);
send_to_char("Spheres: You may have any assortment of sphers, including 2 level 200 sphers.\n\r\n\r",ch);
send_to_char("#0[------------------------------------------------------]\n\r",ch);
send_to_char("#0Race Level One Spheres \n\r",ch);
send_to_char("#0Combat1 - Animal1 - Wokanist - Necromancer \n\r",ch);
send_to_char("#0[------------------------------------------------------]\n\r",ch);
send_to_char("#0Race Level 50 Spheres \n\r",ch);
send_to_char("#0Pyromancer - Healing - Diviner - Transmuter\n\r",ch);
send_to_char("#0Chaos - Enchantment\n\r",ch);
send_to_char("#0[------------------------------------------------------]\n\r",ch);
send_to_char("#0Race Level 100 Spheres \n\r",ch);
send_to_char("#0Combat2 - Illusionist - Geomancer - Holy\n\r",ch);
send_to_char("#0Shadow - Moon\n\r",ch);
send_to_char("#0[------------------------------------------------------]\n\r",ch);
send_to_char("#0Race Level 150 Spheres \n\r",ch);
send_to_char("#0Combat3 - Abjurer - Hydromancer - Enhancement\n\r",ch);
send_to_char("#0Aeromancer \n\r",ch);
send_to_char("#0[------------------------------------------------------]\n\r",ch);
send_to_char("#0Race Level 200 Spheres \n\r",ch);
send_to_char("#0Combat4 - Animal2 \n\r",ch);
send_to_char("#0[------------------------------------------------------]\n\r",ch);
return;
}
if (ch->pcsphereammount > 4 && ch->pcremort == 0)
{
send_to_char( "#0You are only allowed 5 spheres.#n\n\r", ch);
return;
}
else if (ch->pcremort == 1 && ch->pcsphereammount > 5)
{
send_to_char( "#0You are only allowed 6 spheres.#n\n\r", ch);
return;
}
else if (ch->pcremort == 2 && ch->pcsphereammount > 6)
{
send_to_char( "#0You are only allowed 7 spheres.#n\n\r", ch);
return;
}
else if (ch->pcremort == 3 && ch->pcsphereammount > 7)
{
send_to_char( "#0You are only allowed 8 spheres.#n\n\r", ch);
return;
}
if (!str_cmp(arg1,"combat1"))
{
if (IS_SET(ch->pcsphere, SPHERE_COMBAT1))
{
send_to_char( "#0You Already have this sphere.#n\n\r", ch);
return;
}
SET_BIT(ch->pcsphere, SPHERE_COMBAT1);
send_to_char( "#0You have begun your studies in the Combat One Sphere.#n\n\r", ch);
ch->pcsphereammount++;
return;
}
else if (!str_cmp(arg1,"animal1"))
{
if (IS_SET(ch->pcsphere, SPHERE_ANIMAL))
{
send_to_char( "#0You Already have this sphere.#n\n\r", ch);
return;
}
SET_BIT(ch->pcsphere, SPHERE_ANIMAL);
send_to_char( "#0You have begun your studies in the Animal One Sphere.#n\n\r", ch);
ch->pcsphereammount++;
return;
}
else if (!str_cmp(arg1,"wokanist"))
{
if (IS_SET(ch->pcsphere, SPHERE_WOKANIST))
{
send_to_char( "#0You Already have this sphere.#n\n\r", ch);
return;
}
SET_BIT(ch->pcsphere, SPHERE_WOKANIST);
send_to_char( "#0You have begun your studies in the Wokanist Sphere.#n\n\r", ch);
ch->pcsphereammount++;
return;
}
else if (!str_cmp(arg1,"necromancer"))
{
if (IS_SET(ch->pcsphere, SPHERE_NECROMANCER))
{
send_to_char( "#0You Already have this sphere.#n\n\r", ch);
return;
}
SET_BIT(ch->pcsphere, SPHERE_NECROMANCER);
send_to_char( "#0You have become a Necromancer.#n\n\r", ch);
ch->pcsphereammount++;
return;
}
else if (!str_cmp(arg1,"pyromancer"))
{
if (ch->pcRaceLevel < 50)
{
send_to_char( "#0This Sphere requires Race level 50.#n\n\r", ch);
return;
}
if (IS_SET(ch->pcsphere, SPHERE_PYROMANCER))
{
send_to_char( "#0You Already have this sphere.#n\n\r", ch);
return;
}
if (IS_SET(ch->pcsphere, SPHERE_HYDROMANCER))
{
send_to_char( "#0You cant be a Pyromancer if your already a Hydromancer.#n\n\r", ch);
return;
}
else
{
SET_BIT(ch->pcsphere, SPHERE_PYROMANCER);
ch->pcdata->powers[S_HANDFIRE] = 6;
send_to_char( "#0You have become a Pyromancer.#n\n\r", ch);
ch->pcsphereammount++;
}
return;
}
else if (!str_cmp(arg1,"chaos"))
{
if (ch->pcRaceLevel < 50)
{
send_to_char( "#0This Sphere requires Race level 50.#n\n\r", ch);
return;
}
if (IS_SET(ch->pcsphere, SPHERE_CHAOS))
{
send_to_char( "#0You Already have this sphere.#n\n\r", ch);
return;
}
else
{
SET_BIT(ch->pcsphere, SPHERE_CHAOS);
send_to_char( "#0You have become a Chaos Mage.#n\n\r", ch);
ch->pcsphereammount++;
}
return;
}
else if (!str_cmp(arg1,"enchantment"))
{
if (ch->pcRaceLevel < 50)
{
send_to_char( "#0This Sphere requires Race level 50.#n\n\r", ch);
return;
}
if (IS_SET(ch->pcsphere, SPHERE_ENCHANTMENT))
{
send_to_char( "#0You Already have this sphere.#n\n\r", ch);
return;
}
else
{
SET_BIT(ch->pcsphere, SPHERE_ENCHANTMENT);
send_to_char( "#0You have become an Enchanter.#n\n\r", ch);
ch->pcsphereammount++;
}
return;
}
else if (!str_cmp(arg1,"healing"))
{
if (ch->pcRaceLevel < 50)
{
send_to_char( "#0This Sphere requires Race level 50.#n\n\r", ch);
return;
}
if (IS_SET(ch->pcsphere, SPHERE_HEALING))
{
send_to_char( "#0You Already have this sphere.#n\n\r", ch);
return;
}
else
{
SET_BIT(ch->pcsphere, SPHERE_HEALING);
send_to_char( "#0You have become a Healer.#n\n\r", ch);
ch->pcsphereammount++;
}
return;
}
else if (!str_cmp(arg1,"diviner"))
{
if (ch->pcRaceLevel < 50)
{
send_to_char( "#0This Sphere requires Race level 50.#n\n\r", ch);
return;
}
if (IS_SET(ch->pcsphere, SPHERE_DIVINER))
{
send_to_char( "#0You Already have this sphere.#n\n\r", ch);
return;
}
else
{
SET_BIT(ch->pcsphere, SPHERE_DIVINER);
send_to_char( "#0You have become a Diviner.#n\n\r", ch);
ch->pcsphereammount++;
}
return;
}
else if (!str_cmp(arg1,"transmuter"))
{
if (ch->pcRaceLevel < 50)
{
send_to_char( "#0This Sphere requires Race level 50.#n\n\r", ch);
return;
}
if (IS_SET(ch->pcsphere, SPHERE_TRANSMUTER))
{
send_to_char( "#0You Already have this sphere.#n\n\r", ch);
return;
}
else
{
SET_BIT(ch->pcsphere, SPHERE_TRANSMUTER);
send_to_char( "#0You have become a Transmuter.#n\n\r", ch);
ch->pcsphereammount++;
}
return;
}
else if (!str_cmp(arg1,"combat2"))
{
if (ch->pcRaceLevel < 100)
{
send_to_char( "#0This Sphere requires Race level 100.#n\n\r", ch);
return;
}
if (IS_SET(ch->pcsphere, SPHERE_COMBAT2))
{
send_to_char( "#0You Already have this sphere.#n\n\r", ch);
return;
}
else
{
SET_BIT(ch->pcsphere, SPHERE_COMBAT2);
send_to_char( "#0You have advanced to Combat 2.#n\n\r", ch);
ch->pcsphereammount++;
}
return;
}
else if (!str_cmp(arg1,"illusionist"))
{
if (ch->pcRaceLevel < 100)
{
send_to_char( "#0This Sphere requires Race level 100.#n\n\r", ch);
return;
}
if (IS_SET(ch->pcsphere, SPHERE_ILLUSIONIST))
{
send_to_char( "#0You Already have this sphere.#n\n\r", ch);
return;
}
else
{
SET_BIT(ch->pcsphere, SPHERE_ILLUSIONIST);
send_to_char( "#0You have become an Illusionist.#n\n\r", ch);
ch->pcsphereammount++;
}
return;
}
else if (!str_cmp(arg1,"geomancer"))
{
if (ch->pcRaceLevel < 100)
{
send_to_char( "#0This Sphere requires Race level 100.#n\n\r", ch);
return;
}
if (IS_SET(ch->pcsphere, SPHERE_GEOMANCER))
{
send_to_char( "#0You Already have this sphere.#n\n\r", ch);
return;
}
if (IS_SET(ch->pcsphere, SPHERE_AEROMANCER))
{
send_to_char( "#0You cant be a Geomancer if your already an Aeromancer.#n\n\r", ch);
return;
}
else
{
SET_BIT(ch->pcsphere, SPHERE_GEOMANCER);
ch->pcdata->powers[S_HANDEARTH] = 6;
send_to_char( "#0You have become a Geomancer.#n\n\r", ch);
ch->pcsphereammount++;
}
return;
}
else if (!str_cmp(arg1,"shadow"))
{
if (ch->pcRaceLevel < 100)
{
send_to_char( "#0This Sphere requires Race level 100.#n\n\r", ch);
return;
}
if (IS_SET(ch->pcsphere, SPHERE_SHADOW))
{
send_to_char( "#0You Already have this sphere.#n\n\r", ch);
return;
}
if (IS_SET(ch->pcsphere, SPHERE_HOLY))
{
send_to_char( "#0Priests arnt allowed to be Shadowmancers.#n\n\r", ch);
return;
}
else
{
SET_BIT(ch->pcsphere, SPHERE_SHADOW);
ch->pcdata->powers[S_HANDSHADOW] = 6;
send_to_char( "#0You have become a Shadowmancer.#n\n\r", ch);
ch->pcsphereammount++;
}
return;
}
else if (!str_cmp(arg1,"holy"))
{
if (ch->pcRaceLevel < 100)
{
send_to_char( "#0This Sphere requires Race level 100.#n\n\r", ch);
return;
}
if (IS_SET(ch->pcsphere, SPHERE_HOLY))
{
send_to_char( "#0You Already have this sphere.#n\n\r", ch);
return;
}
if (IS_SET(ch->pcsphere, SPHERE_SHADOW))
{
send_to_char( "#0Shadowmancers arnt allowed to be Priests.#n\n\r", ch);
return;
}
else
{
SET_BIT(ch->pcsphere, SPHERE_HOLY);
ch->pcdata->powers[S_HANDHOLY] = 6;
send_to_char( "#0You have become a Priest.#n\n\r", ch);
ch->pcsphereammount++;
}
return;
}
else if (!str_cmp(arg1,"combat3"))
{
if (ch->pcRaceLevel < 150)
{
send_to_char( "#0This Sphere requires Race level 150.#n\n\r", ch);
return;
}
if (IS_SET(ch->pcsphere, SPHERE_COMBAT3))
{
send_to_char( "#0You Already have this sphere.#n\n\r", ch);
return;
}
else
{
SET_BIT(ch->pcsphere, SPHERE_COMBAT3);
send_to_char( "#0You have become a Fighter with level 3 Combat.#n\n\r", ch);
ch->pcsphereammount++;
}
return;
}
else if (!str_cmp(arg1,"abjurer"))
{
if (ch->pcRaceLevel < 150)
{
send_to_char( "#0This Sphere requires Race level 150.#n\n\r", ch);
return;
}
if (IS_SET(ch->pcsphere, SPHERE_ABJURER))
{
send_to_char( "#0You Already have this sphere.#n\n\r", ch);
return;
}
else
{
SET_BIT(ch->pcsphere, SPHERE_ABJURER);
send_to_char( "#0You have become an Abjurer.#n\n\r", ch);
ch->pcsphereammount++;
}
return;
}
else if (!str_cmp(arg1,"hydromancer"))
{
if (ch->pcRaceLevel < 150)
{
send_to_char( "#0This Sphere requires Race level 150.#n\n\r", ch);
return;
}
if (IS_SET(ch->pcsphere, SPHERE_HYDROMANCER))
{
send_to_char( "#0You Already have this sphere.#n\n\r", ch);
return;
}
if (IS_SET(ch->pcsphere, SPHERE_PYROMANCER))
{
send_to_char( "#0You cant be a Hydromancer if your already a Pyromancer.#n\n\r", ch);
return;
}
else
{
SET_BIT(ch->pcsphere, SPHERE_HYDROMANCER);
ch->pcdata->powers[S_HANDWATER] = 6;
send_to_char( "#0You have become a Hydromancer.#n\n\r", ch);
ch->pcsphereammount++;
}
return;
}
else if (!str_cmp(arg1,"enhancement"))
{
if (ch->pcRaceLevel < 150)
{
send_to_char( "#0This Sphere requires Race level 150.#n\n\r", ch);
return;
}
if (IS_SET(ch->pcsphere, SPHERE_ENHANCEMENT))
{
send_to_char( "#0You Already have this sphere.#n\n\r", ch);
return;
}
else
{
SET_BIT(ch->pcsphere, SPHERE_ENHANCEMENT);
send_to_char( "#0You have become a student of Enhancement.#n\n\r", ch);
ch->pcsphereammount++;
}
return;
}
else if (!str_cmp(arg1,"aeromancer"))
{
if (ch->pcRaceLevel < 150)
{
send_to_char( "#0This Sphere requires Race level 150.#n\n\r", ch);
return;
}
if (IS_SET(ch->pcsphere, SPHERE_AEROMANCER))
{
send_to_char( "#0You Already have this sphere.#n\n\r", ch);
return;
}
else
{
SET_BIT(ch->pcsphere, SPHERE_AEROMANCER);
ch->pcdata->powers[S_HANDWIND] = 6;
send_to_char( "#0You have become an Aeromancer.#n\n\r", ch);
ch->pcsphereammount++;
}
return;
}
else if (!str_cmp(arg1,"combat4"))
{
if (ch->pcRaceLevel < 200)
{
send_to_char( "#0This Sphere requires Race level 200.#n\n\r", ch);
return;
}
if (IS_SET(ch->pcsphere, SPHERE_COMBAT4))
{
send_to_char( "#0You Already have this sphere.#n\n\r", ch);
return;
}
else
{
SET_BIT(ch->pcsphere, SPHERE_COMBAT4);
send_to_char( "#0You have become a fighter with Combat 4.#n\n\r", ch);
ch->pcsphereammount++;
}
return;
}
else if (!str_cmp(arg1,"animal2"))
{
if (ch->pcRaceLevel < 200)
{
send_to_char( "#0This Sphere requires Race level 200.#n\n\r", ch);
return;
}
if (IS_SET(ch->pcsphere, SPHERE_ANIMAL2))
{
send_to_char( "#0You Already have this sphere.#n\n\r", ch);
return;
}
else
{
SET_BIT(ch->pcsphere, SPHERE_ANIMAL2);
send_to_char( "#0You have become a Druid with Animal Two#n\n\r", ch);
ch->pcsphereammount++;
}
return;
}
else do_selfsphere(ch,"");
return;
}
/* use for processing a skill or group for addition */
/*
void group_add( CHAR_DATA *ch, const char *name, bool deduct)
{
int sn,gn;
if (IS_NPC(ch)
return;
sn = skill_lookup(name);
if (sn != -1)
{
if (ch->pcdata->learned[sn] == 0)
{
ch->pcdata->learned[sn] = 1;
if (deduct)
ch->pcdata->points += skill_table[sn].rating[ch->class];
}
return;
}
*/
/* now check groups */
void do_remort(CHAR_DATA * ch, char *argument)
{
if( ch->pcRaceLevel < 200 )
{
send_to_char( "You have to be level 200 to remort.\n\r", ch );
return;
}
if( ch->pcremort >= 5)
{
send_to_char( "You have reached the max remort level.\n\r", ch );
return;
}
ch->pcremort += 1;
ch->pcRaceLevel = 0;
if (ch->pcremort == 1){
ch->max_hit = 20000;
ch->max_move = 20000;
ch->max_mana = 20000;}
if (ch->pcremort == 2){
ch->max_hit = 30000;
ch->max_move = 30000;
ch->max_mana = 30000;}
if (ch->pcremort == 3){
ch->max_hit = 40000;
ch->max_move = 40000;
ch->max_mana = 40000;}
if (ch->pcremort == 4){
ch->max_hit = 50000;
ch->max_move = 50000;
ch->max_mana = 50000;}
if (ch->pcremort == 5){
ch->max_hit = 60000;
ch->max_move = 60000;
ch->max_mana = 60000;}
send_to_char( "You have succesfuly remorted.\n\r", ch );
return;
}
void do_gainlevel(CHAR_DATA * ch, char *argument)
{
char buf[MAX_STRING_LENGTH];
int lgainexp = 1550000 * ch->pcRaceLevel;
int hp = 0;
int mana = 0;
int move = 0;
hp = number_range(650,800);
mana = number_range(650,800);
move = number_range(650,800);
if( ch->pcRaceLevel >= 200 )
{
send_to_char( "Already Maximum Race Level.\n\r", ch );
return;
}
if (lgainexp > ch->exp)
{
send_to_char( "You dont have enough exp.\n\r", ch );
return;
}
if( ch->exp < lgainexp )
{
sprintf( buf, "Not enough Experience points, you need %d more.\n\r", ( lgainexp - ch->exp ) );
send_to_char( buf, ch );
return;
}
ch->exp -= lgainexp;
ch->pcRaceLevel++;
sprintf( buf, "#0%s is now #RLevel #R[#0%d#R]#n", ch->pcdata->switchname, ch->pcRaceLevel );
do_info( ch, buf );
sprintf( buf, "You gain %d HP, %d Move and %d Mana.\n\r", hp, move, mana );
send_to_char( buf, ch );
ch->max_hit += hp;
ch->max_move += move;
ch->max_mana += mana;
return;
}
void do_newbiepack(CHAR_DATA * ch, char *argument)
{
int templevel = 0;
if (ch->level == 1 || ch->level > 6)
{
templevel = ch->level;
ch->level = 12;
ch->trust = 12;
do_oload(ch, "2007");
do_oload(ch, "2008");
do_oload(ch, "2009");
do_oload(ch, "2010");
do_oload(ch, "2011");
ch->level = templevel;
//ch->level = 1;
ch->trust = 0;
}
return;
}