📄 act_wiz.c
字号:
}
else
{
SET_BIT(victim->act, PLR_SILENCE);
send_to_char( "You can't use channels!\n\r", victim );
send_to_char( "SILENCE set.\n\r", ch );
}
return;
}
void do_peace( CHAR_DATA *ch, char *argument )
{
CHAR_DATA *rch;
for ( rch = ch->in_room->people; rch != NULL; rch = rch->next_in_room )
{
if ( rch->fighting != NULL )
stop_fighting( rch, TRUE );
}
send_to_char( "Ok.\n\r", ch );
return;
}
BAN_DATA * ban_free;
BAN_DATA * ban_list;
void do_ban( CHAR_DATA *ch, char *argument )
{
#if 0
char buf[MAX_STRING_LENGTH];
char arg[MAX_INPUT_LENGTH];
BAN_DATA *pban;
if ( IS_NPC(ch) )
return;
one_argument( argument, arg );
if ( arg[0] == '\0' )
{
strcpy( buf, "Banned sites:\n\r" );
for ( pban = ban_list; pban != NULL; pban = pban->next )
{
strcat( buf, pban->name );
strcat( buf, "\n\r" );
}
send_to_char( buf, ch );
return;
}
for ( pban = ban_list; pban != NULL; pban = pban->next )
{
if ( !str_cmp( arg, pban->name ) )
{
send_to_char( "That site is already banned!\n\r", ch );
return;
}
}
if ( ban_free == NULL )
{
pban = alloc_perm( sizeof(*pban) );
}
else
{
pban = ban_free;
ban_free = ban_free->next;
}
pban->name = str_dup( arg );
pban->next = ban_list;
ban_list = pban;
send_to_char( "Ok.\n\r", ch );
return;
#else
send_to_char( "Site banning has been disabled, as site checking at connect"
" can lag the server.\n\r", ch);
#endif
}
void do_allow( CHAR_DATA *ch, char *argument )
{
char arg[MAX_INPUT_LENGTH];
BAN_DATA *prev;
BAN_DATA *curr;
one_argument( argument, arg );
if ( arg[0] == '\0' )
{
send_to_char( "Remove which site from the ban list?\n\r", ch );
return;
}
prev = NULL;
for ( curr = ban_list; curr != NULL; prev = curr, curr = curr->next )
{
if ( !str_cmp( arg, curr->name ) )
{
if ( prev == NULL )
ban_list = ban_list->next;
else
prev->next = curr->next;
free_string( curr->name );
curr->next = ban_free;
ban_free = curr;
send_to_char( "Ok.\n\r", ch );
return;
}
}
send_to_char( "Site is not banned.\n\r", ch );
return;
}
void do_wizlock( CHAR_DATA *ch, char *argument )
{
extern bool wizlock;
wizlock = !wizlock;
if ( wizlock )
send_to_char( "Game wizlocked.\n\r", ch );
else
send_to_char( "Game un-wizlocked.\n\r", ch );
return;
}
void do_slookup( CHAR_DATA *ch, char *argument )
{
char buf[5*MAX_STRING_LENGTH];
char buf1[5*MAX_STRING_LENGTH];
char arg[MAX_INPUT_LENGTH];
int sn;
one_argument( argument, arg );
if ( arg[0] == '\0' )
{
send_to_char( "Slookup what?\n\r", ch );
return;
}
if ( !str_cmp( arg, "all" ) )
{
buf1[0] = '\0';
for ( sn = 0; sn < MAX_SKILL; sn++ )
{
if ( skill_table[sn].name == NULL )
break;
sprintf( buf, "Sn: %4d Slot: %4d Skill/spell: '%s'\n\r",
sn, skill_table[sn].slot, skill_table[sn].name );
strcat( buf1, buf );
}
send_to_char( buf1, ch );
}
else
{
if ( ( sn = skill_lookup( arg ) ) < 0 )
{
send_to_char( "No such skill or spell.\n\r", ch );
return;
}
sprintf( buf, "Sn: %4d Slot: %4d Skill/spell: '%s'\n\r",
sn, skill_table[sn].slot, skill_table[sn].name );
send_to_char( buf, ch );
}
return;
}
void do_sset( CHAR_DATA *ch, char *argument )
{
char arg1 [MAX_INPUT_LENGTH];
char arg2 [MAX_INPUT_LENGTH];
char arg3 [MAX_INPUT_LENGTH];
CHAR_DATA *victim;
int value;
int sn;
bool fAll;
argument = one_argument( argument, arg1 );
argument = one_argument( argument, arg2 );
argument = one_argument( argument, arg3 );
if ( arg1[0] == '\0' || arg2[0] == '\0' || arg3[0] == '\0' )
{
send_to_char( "Syntax: sset <victim> <skill> <value>\n\r", ch );
send_to_char( "or: sset <victim> all <value>\n\r", ch );
send_to_char( "Skill being any skill or spell.\n\r", ch );
return;
}
if ( ( victim = get_char_world( ch, arg1 ) ) == NULL )
{
send_to_char( "They aren't here.\n\r", ch );
return;
}
if ( IS_NPC(victim) )
{
send_to_char( "Not on NPC's.\n\r", ch );
return;
}
fAll = !str_cmp( arg2, "all" );
sn = 0;
if ( !fAll && ( sn = skill_lookup( arg2 ) ) < 0 )
{
send_to_char( "No such skill or spell.\n\r", ch );
return;
}
/*
* Snarf the value.
*/
if ( !is_number( arg3 ) )
{
send_to_char( "Value must be numeric.\n\r", ch );
return;
}
value = atoi( arg3 );
if ( value < 0 || value > 100 )
{
send_to_char( "Value range is 0 to 100.\n\r", ch );
return;
}
if ( fAll )
{
for ( sn = 0; sn < MAX_SKILL; sn++ )
{
if ( skill_table[sn].name != NULL )
victim->pcdata->learned[sn] = value;
}
}
else
{
victim->pcdata->learned[sn] = value;
}
return;
}
void do_mset( CHAR_DATA *ch, char *argument )
{
char arg1 [MAX_INPUT_LENGTH];
char arg2 [MAX_INPUT_LENGTH];
char arg3 [MAX_INPUT_LENGTH];
char buf [MAX_STRING_LENGTH];
CHAR_DATA *victim;
int value, max;
smash_tilde( argument );
argument = one_argument( argument, arg1 );
argument = one_argument( argument, arg2 );
strcpy( arg3, argument );
if ( arg1[0] == '\0' || arg2[0] == '\0' || arg3[0] == '\0' )
{
send_to_char( "Syntax: mset <victim> <field> <value>\n\r", ch );
send_to_char( "or: mset <victim> <string> <value>\n\r", ch );
send_to_char( "\n\r", ch );
send_to_char( "Field being one of:\n\r", ch );
send_to_char( " str int wis dex con sex class level\n\r", ch );
send_to_char( " gold hp mana move practice align\n\r", ch );
send_to_char( " thirst drunk full race", ch );
send_to_char( "\n\r", ch );
send_to_char( "String being one of:\n\r", ch );
send_to_char( " name short long description title spec\n\r", ch );
return;
}
if ( ( victim = get_char_world( ch, arg1 ) ) == NULL )
{
send_to_char( "They aren't here.\n\r", ch );
return;
}
/*
* Snarf the value (which need not be numeric).
*/
value = is_number( arg3 ) ? atoi( arg3 ) : -1;
/*
* Set something.
*/
if ( !str_cmp( arg2, "str" ) )
{
if ( IS_NPC(victim) )
{
send_to_char( "Not on NPC's.\n\r", ch );
return;
}
if ( class_table[ch->class].attr_prime == APPLY_STR )
max = 25;
else
max = 18;
if ( value < 3 || value > max )
{
sprintf( buf, "Strength range is 3 to %d.\n\r", max );
send_to_char( buf, ch );
return;
}
victim->pcdata->perm_str = value;
return;
}
if ( !str_cmp( arg2, "int" ) )
{
if ( IS_NPC(victim) )
{
send_to_char( "Not on NPC's.\n\r", ch );
return;
}
if ( class_table[ch->class].attr_prime == APPLY_INT )
max = 25;
else
max = 18;
if ( value < 3 || value > max )
{
sprintf( buf, "Intelligence range is 3 to %d.\n\r", max );
send_to_char( buf, ch );
return;
}
victim->pcdata->perm_int = value;
return;
}
if ( !str_cmp( arg2, "wis" ) )
{
if ( IS_NPC(victim) )
{
send_to_char( "Not on NPC's.\n\r", ch );
return;
}
if ( class_table[ch->class].attr_prime == APPLY_WIS )
max = 25;
else
max = 18;
if ( value < 3 || value > max )
{
sprintf( buf, "Wisdom range is 3 to %d.\n\r", max );
send_to_char( buf, ch );
return;
}
victim->pcdata->perm_wis = value;
return;
}
if ( !str_cmp( arg2, "dex" ) )
{
if ( IS_NPC(victim) )
{
send_to_char( "Not on NPC's.\n\r", ch );
return;
}
if ( class_table[ch->class].attr_prime == APPLY_DEX )
max = 25;
else
max = 18;
if ( value < 3 || value > max )
{
sprintf( buf, "Dexterity range is 3 to %d.\n\r", max );
send_to_char( buf, ch );
return;
}
victim->pcdata->perm_dex = value;
return;
}
if ( !str_cmp( arg2, "con" ) )
{
if ( IS_NPC(victim) )
{
send_to_char( "Not on NPC's.\n\r", ch );
return;
}
if ( class_table[ch->class].attr_prime == APPLY_CON )
max = 25;
else
max = 18;
if ( value < 3 || value > max )
{
sprintf( buf, "Constitution range is 3 to %d.\n\r", max );
send_to_char( buf, ch );
return;
}
victim->pcdata->perm_con = value;
return;
}
if ( !str_cmp( arg2, "sex" ) )
{
if ( value < 0 || value > 2 )
{
send_to_char( "Sex range is 0 to 2.\n\r", ch );
return;
}
victim->sex = value;
return;
}
if ( !str_cmp( arg2, "class" ) )
{
if ( value < 0 || value >= MAX_CLASS )
{
char buf[MAX_STRING_LENGTH];
sprintf( buf, "Class range is 0 to %d.\n", MAX_CLASS-1 );
send_to_char( buf, ch );
return;
}
victim->class = value;
return;
}
if ( !str_cmp( arg2, "race" ) )
{
if ( value < 0 || value >= MAX_RACE )
{
char buf[MAX_STRING_LENGTH];
sprintf( buf, "Race range is 0 to %d.\n", MAX_RACE-1 );
send_to_char( buf, ch );
return;
}
victim->race = value;
return;
}
if ( !str_cmp( arg2, "level" ) )
{
if ( !IS_NPC(victim) )
{
send_to_char( "Not on PC's.\n\r", ch );
return;
}
if ( value < 0 || value > 50 )
{
send_to_char( "Level range is 0 to 50.\n\r", ch );
return;
}
victim->level = value;
return;
}
if ( !str_cmp( arg2, "gold" ) )
{
victim->gold = value;
return;
}
if ( !str_cmp( arg2, "hp" ) )
{
if ( value < -10 || value > 30000 )
{
send_to_char( "Hp range is -10 to 30,000 hit points.\n\r", ch );
return;
}
victim->max_hit = value;
return;
}
if ( !str_cmp( arg2, "mana" ) )
{
if ( value < 0 || value > 30000 )
{
send_to_char( "Mana range is 0 to 30,000 mana points.\n\r", ch );
return;
}
victim->max_mana = value;
return;
}
if ( !str_cmp( arg2, "move" ) )
{
if ( value < 0 || value > 30000 )
{
send_to_char( "Move range is 0 to 30,000 move points.\n\r", ch );
return;
}
victim->max_move = value;
return;
}
if ( !str_cmp( arg2, "practice" ) )
{
if ( value < 0 || value > 100 )
{
send_to_char( "Practice range is 0 to 100 sessions.\n\r", ch );
return;
}
victim->practice = value;
return;
}
if ( !str_cmp( arg2, "align" ) )
{
if ( value < -1000 || value > 1000 )
{
send_to_char( "Alignment range is -1000 to 1000.\n\r", ch );
return;
}
victim->alignment = value;
return;
}
if ( !str_cmp( arg2, "thirst" ) )
{
if ( IS_NPC(victim) )
{
send_to_char( "Not on NPC's.\n\r", ch );
return;
}
if ( value < 0 || value > 100 )
{
send_to_char( "Thirst range is 0 to 100.\n\r", ch );
return;
}
victim->pcdata->condition[COND_THIRST] = value;
return;
}
if ( !str_cmp( arg2, "drunk" ) )
{
if ( IS_NPC(victim) )
{
send_to_char( "Not on NPC's.\n\r", ch );
return;
}
if ( value < 0 || value > 100 )
{
send_to_char( "Drunk range is 0 to 100.\n\r", ch );
return;
}
victim->pcdata->condition[COND_DRUNK] = value;
return;
}
if ( !str_cmp( arg2, "full" ) )
{
if ( IS_NPC(victim) )
{
send_to_char( "Not on NPC's.\n\r", ch );
return;
}
if ( value < 0 || value > 100 )
{
send_to_char( "Full range is 0 to 100.\n\r", ch );
return;
}
victim->pcdata->condition[COND_FULL] = value;
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -