escape koden. läs guiden RECALL först, innan detta, för jag
förklara bara nya grejer var gång.
Sårhär set koden ut:
void do_escape( CHAR_DATA *ch, char
*argument ) { char buf[MAX_STRING_LENGTH]; ROOM_INDEX_DATA *location; if (IS_NPC(ch) || !IS_HERO(ch)) if ( ( location = get_room_index( ROOM_VNUM_TEMPLE
) ) == NULL ) if ( ch->in_room == location ) ch->move = 0; return; |
void do_escape (char_data *ch, char *argument* ) - en funktion börjar alltid såhär
char buf[MAX_STRING_LENGTH]; ROOM_INDEX_DATA *location; |
vi skapar två nya variablar. noterna att en variabel, som skapas i en funktion, funkar ENDAST BARA i den funktionen, den för varje gång vi hoppar ut ur funktionen.
char buf [MAX_STRING_LENGHT] - vi skapar en sträng (char) och döper
den (buf) och ger den ett max-värde (MAX_STRING_LENGHT - 4000-nånting)
ROOM_INDEX_DATA *location - vi skapar ett temporärt rum, och döper
den till 'location'
if (IS_NPC(ch) || !IS_HERO(ch)) |
om personen som utför kommandet är en NPC (non player character)
eller ( || ) är inte immortal.
IS_HERO - vi frågar hon spelaren ch är en immortal. level 'hero'
användes i de gamla MERC muddarna, men ingen har brytt sig om att dom tog
bort level HERO
! - betyder motsatt. DVS: "IS_HERO" - är han immortal? "!IS_HERO"
- är han INTE immortal?
alltså, betyder IF-satsen: om personen är ett monster eller är
en dödling ( icke immortal) gör detta:
return; - avbryt
if ( ch->position >= POS_SLEEPING
) |
det finns olika nivåer på en persons 'position' kan vara. de är
definerade i merc.h. sök igenom merc.h efter 'POS_' och titta själv.
aja, om spelarens (ch) postion ÄR MER ÄN ELLER ÄR 'POS_SLEEPING'
>= - betyder 'är mer än eller är' ex: 5 >= 4 är sant. 4 >= 4 är sant. 3 >= 4, stämmer inte.
if ( ( location = get_room_index( ROOM_VNUM_TEMPLE
) ) == NULL ) |
vi bestämer att location är rummet 'ROOM_VNUM_TEMPLE' (ROOM_VNUM_TEMPLE
är också definerat i merc.h)
om rummet finns inte: skicka till spelaren 'You are complete..."
if ( ch->in_room == location ) |
om spelaren är redan i 'ROOM_VNUM_TEMPLE', gör return;
ch->move = 0; return; |
här sätter vi att spelarens move och mana blir 0 (ch->move = 0,
ch->mana = 0)
act() - skicka '$n fades out of..' till alla i rummet
char_from_room() - ta ut spelaren
char_to_room() sätt dit spelaren ch, till rummet location
act() - skriv på skärmen '$n fades into ex...'
do_look() - gör så att spelare tittar automatiskt ("auto")
sprintf - här bestämmer vi att buf ska innehålla '$s has excaped
fenceless from a fight'. Det roliga med sprintf är att man ska byta ut
saker i texten.
som du ser börjar texte med %s. %s är faktiskt en sträng, som
bestäms senare av ch-name. alltså blir %s "Tragon".
ex: sprintf( buf, "%s hoppar på %s och ger honom %d slag, ch->name,
victim->name, 34 ); ch är Corgrath, victim är Tragon.
då kommer buf faktiskt innehålla: Corgrath hoppar på Tragon
och ger honom 32 slag.
%s - stränger (text)
%d - heltal (siffror)
do_info() - är den funktionen som är just 'INFO -> bla, bla bla'