void gain_skill_prof(struct creature *ch, int skl) { int learned; if (skl == SKILL_READ_SCROLLS || skl == SKILL_USE_WANDS) learned = 10; else learned = LEARNED(ch); // NPCs don't learn if (IS_NPC(ch)) return; // You can't gain in a skill that you don't really know if (GET_LEVEL(ch) < SPELL_LEVEL(skl, GET_CLASS(ch))) { if (!IS_REMORT(ch)) return; if (GET_LEVEL(ch) < SPELL_LEVEL(skl, GET_REMORT_CLASS(ch))) return; } // Check for remort classes too if (SPELL_GEN(skl, GET_CLASS(ch)) > 0 && GET_REMORT_GEN(ch) < SPELL_GEN(skl, GET_CLASS(ch))) return; if (GET_SKILL(ch, skl) >= (learned - 10)) if ((GET_SKILL(ch, skl) - GET_LEVEL(ch)) <= 66) SET_SKILL(ch, skl, GET_SKILL(ch, skl) + 1); }
void perform_net_load(struct descriptor_data *d, char *arg) { int skill_num, percent; long int cost; skip_spaces(&arg); if (!*arg) { d_printf(d, "Usage: load <program>\r\n"); return; } skill_num = find_skill_num(arg); if (skill_num < 1) { d_printf(d, "Error: program '%s' not found\r\n", arg); return; } if ((SPELL_GEN(skill_num, CLASS_CYBORG) > 0 && GET_CLASS(d->creature) != CLASS_CYBORG) || (GET_REMORT_GEN(d->creature) < SPELL_GEN(skill_num, CLASS_CYBORG)) || (GET_LEVEL(d->creature) < SPELL_LEVEL(skill_num, CLASS_CYBORG))) { d_printf(d, "Error: resources unavailable to load '%s'\r\n", arg); return; } if (GET_SKILL(d->creature, skill_num) >= LEARNED(d->creature)) { d_printf(d, "Program fully installed on local system.\r\n"); return; } cost = GET_SKILL_COST(d->creature, skill_num); d_printf(d, "Program cost: %10ld Account balance; %'" PRId64 "\r\n", cost, d->account->bank_future); if (d->account->bank_future < cost) { d_printf(d, "Error: insufficient funds in your account\r\n"); return; } withdraw_future_bank(d->account, cost); percent = MIN(MAXGAIN(d->creature), MAX(MINGAIN(d->creature), GET_INT(d->creature) * 2)); percent = MIN(LEARNED(d->creature) - GET_SKILL(d->creature, skill_num), percent); SET_SKILL(d->creature, skill_num, GET_SKILL(d->creature, skill_num) + percent); d_printf(d, "Program download: %s terminating, %d percent transfer.\r\n", spell_to_str(skill_num), percent); if (GET_SKILL(d->creature, skill_num) >= LEARNED(d->creature)) d_printf(d, "Program fully installed on local system.\r\n"); else d_printf(d, "Program %d%% installed on local system.\r\n", GET_SKILL(d->creature, skill_num)); }
/* * Core procedure for dragons. */ bool dragon( CHAR_DATA *ch, int sn ) { CHAR_DATA *victim; if ( ch->position != POS_FIGHTING ) return FALSE; for ( victim = ch->in_room->people; victim; victim = victim->next_in_room ) { if ( victim->deleted ) continue; if ( is_safe( ch, victim, FALSE ) ) continue; if ( is_fighting( victim, ch ) && number_bits( 2 ) == 0 ) break; } if ( !victim ) return FALSE; ( *skill_table[ sn ].spell_fun )( sn, SPELL_LEVEL( ch, ch->level ), ch, victim, USAGE_SPECIAL ); return TRUE; }