#include <thing/properties.h>#include <moving.h>#include <defines.h>
gehe zum Quellcode dieser Datei
Funktionen | |
| varargs int | DoUnwield (int silent) |
| varargs int | move (mixed dest, int method) |
| varargs int | remove (int silent) |
Variablen | |
| inherit std thing | moving |
| varargs int DoUnwield | ( | int | silent | ) |
Definiert in Zeile 403 der Datei combat.c.
Benutzt break_string(), cl, doUnwieldMessage(), InformUnwield(), M_NOCHECK, ME, name, P_CURSED, P_PARRY, P_PARRY_WEAPON, P_TOTAL_AC, P_TOTAL_WC, P_UNWIELD_FUNC, P_UNWIELD_TIME, P_WEAPON, P_WIELDED, PARRY_NOT, PARRY_ONLY, QueryProp(), SetProp() und WEN.
Wird benutzt von move(), remove() und unwield().
00404 { closure cl; 00405 int parry; 00406 mixed res; 00407 object wielded_by; 00408 00409 // Waffen, die nicht gezueckt sind, kann man natuerlich nicht 00410 // wegstecken 00411 if (!objectp(wielded_by=QueryProp(P_WIELDED))) 00412 { 00413 return 0; 00414 } 00415 00416 // Ist eine UnwieldFunc gesetzt, wird diese aufgerufen 00417 if ( objectp(res=QueryProp(P_UNWIELD_FUNC)) && 00418 !(res->UnwieldFunc(ME,silent,wielded_by)) ) 00419 { 00420 // Eine Meldung muss die UnwieldFunc schon selbst ausgeben. 00421 return 1; 00422 } 00423 00424 // Eine verfluchte Waffe kann man natuerlich nicht wegstecken - aber 00425 // auch da gibts Ausnahmefaelle, wie z.B. den Tod eines Spielers 00426 if ((res=QueryProp(P_CURSED)) && !(silent&M_NOCHECK)) 00427 { 00428 if (stringp(res)) 00429 { 00430 // Stand in P_CURSED ein String? Dann diesen ausgeben 00431 tell_object(wielded_by, 00432 (res[<1]=='\n' ? res : break_string(res,78))); 00433 } 00434 else 00435 { 00436 // Sonst eine Standard-Meldung ausgeben 00437 tell_object(wielded_by, break_string( 00438 "Du kannst "+name(WEN)+" nicht wegstecken.",78)); 00439 } 00440 return 1; 00441 } 00442 00443 // Ok, jetzt ist alles klar, die (Parier)Waffe wird weggesteckt 00444 parry=QueryProp(P_PARRY); 00445 cl=symbol_function("SetProp",wielded_by); 00446 00447 if (parry<PARRY_ONLY) 00448 { 00449 // Eintrag als Waffe im Spieler loeschen 00450 funcall(cl,P_WEAPON, 0); 00451 } 00452 if (parry>PARRY_NOT) 00453 { 00454 // Eintrag als Parierwaffe im Spieler loeschen 00455 funcall(cl,P_PARRY_WEAPON, 0); 00456 } 00457 00458 // Im Spieler die Zeit setzen, zu der er zuletzt eine Waffe weggesteckt 00459 // hat. 00460 funcall(cl,P_UNWIELD_TIME,time()); 00461 00462 // Meldung ausgeben, wenn silent-Flag nicht gesetzt ist 00463 if (!silent) 00464 { 00465 doUnwieldMessage(wielded_by); 00466 } 00467 00468 // Die Haende, die bisher von der Waffe benutzt wurden, freigeben 00469 wielded_by->FreeHands(ME); 00470 SetProp(P_WIELDED, 0); 00471 00472 // Waffen koennen Attribute aendern/blockieren. Also muessen diese 00473 // nach dem Wegstecken aktualisiert werden 00474 wielded_by->deregister_modifier(ME); 00475 wielded_by->UpdateAttributes(); 00476 00477 // P_TOTAL_AC/P_TOTAL_WC im Spieler aktualisieren. Da dort Attribute 00478 // eingehen, kann das erst hier gemacht werden. 00479 if (parry<PARRY_ONLY) 00480 { 00481 wielded_by->QueryProp(P_TOTAL_WC); 00482 } 00483 if (parry>PARRY_NOT) 00484 { 00485 wielded_by->QueryProp(P_TOTAL_AC); 00486 } 00487 00488 // Inform-Funktion aufrufen 00489 InformUnwield(wielded_by, silent); 00490 00491 // Fertig mit dem Wegstecken 00492 return 1; 00493 }


| varargs int move | ( | mixed | dest, | |
| int | method | |||
| ) |
Definiert in Zeile 24 der Datei moving.c.
Benutzt DoUnwield(), M_NOCHECK, M_SILENT, move(), P_WIELDED und QueryProp().
00025 { 00026 DoUnwield( method & (M_SILENT|M_NOCHECK)); 00027 if ((method & M_NOCHECK) || (!QueryProp(P_WIELDED))) 00028 return ::move(dest, method ); 00029 }

| varargs int remove | ( | int | silent | ) |
Definiert in Zeile 31 der Datei moving.c.
Benutzt DoUnwield(), P_WIELDED, QueryProp() und remove().
00032 { 00033 DoUnwield( silent ); 00034 if (!QueryProp(P_WIELDED)) 00035 return ::remove( silent ); 00036 }

1.6.3