Der Virus ========= Dieses Objekt simuliert Verletzungen, Krankheiten, Seuchen, Vergiftungen usw. Der Virus zieht seinem Besitzer jeder Minute APs ab und gibt dabei nette Meldungen aus. Um die Gemeinheit perfekt zu machen, ist er ein Autoloader. Man kann eine Hoechstdauer und eine Minimalanzahl von APs festlegen, bei denen der Virus abstirbt, in jedem Fall aber endet der Virus mit dem Tod. Die Seuche ist zu allem Ueberfluss ansteckend: In jeder Minute werden alle Spieler im Raum mit einer gewissen Wahrscheinlichkeit angesteckt. Damit das nicht ausufert, ist man nach Ausheilen einer Seuche gegen diesen bestimmten Typ immun. Wie mach ich das? ================= Man clont den Virus (/obj/virus), ruft ein paar set-Funktionen auf moved das Ergebnis in den Spieler. Welche set-Funktionen denn? =========================== (Bemerkung: zu jedem "set_blabla" gibt es auch ein "query_blabla", das genau das liefert, was man erwarten moechte) void set_virus_name(string name) Damit setzt man den Namen des Virus. Gleichzeitig werden id und name richtig gesetzt. Default: "Grippe". void set_virus_str(int strength) Damit setzt man den AP-Abzug pro Minute. Default: 1. Dafuer gibt es auch eine Funktion add_virus_str(). void set_virus_min(int minimal) Wenn die APs unter die Grenze fallen, dann verfluechtigt sich der Virus. Natuerlich koennen die ganz gemeinen hier -1 angeben. Default: 25. void set_virus_dur(int duration) Nach heilt der Virus von ganz alleine (wenn nicht vorher ein Heiler aufgesucht wurde oder die mit set_virus_min() gesetzte Grenze unterschritten wurde). Der Wert -1 bedeutet endlos. Ihgitt. Default: 300. Hier gibt es auch eine Funktion add_virus_dur(). void set_virus_look(string look) Ein extra_look fuer den Spieler. wird einfach an Er(spieler) angehaengt. Default: "sieht total verschwitzt aus." Mit set_virus_look(0) schaltet man dieses Feature ab. void set_virus_type(string type) Virus-Art. Folgendes steht zur Auswahl: "verletzung", "krankheit", "gift", "seuche" und "fluch". Seuchen stecken andere Spieler an! Je nach Art des Virus, sollte man diesen auch auf unterschiedliche Arten heilen koennen. Default: "seuche" void set_virus_chance(int chance) Damit stellt man bei einer Seuche die Ansteckungswahrscheinlichkeit ein. Bei anderen Virus-Typen sinnlos. void set_immun_time(int time): Setzt die zeit, wie lange der Player nach der Seuche immun bleibt. (0 ist moeglich, aber sonst nur Werte zwischen 300 <= time <= 7200) Bei anderen Virus-Typen sinnlos. void set_virus_heal_msg(string heal_msg) Welche Nachricht, soll der Spieler erhalten, wenn er die Krankheit ueberwunden hat? Mit set_virus_heal_msg(0) werden fuer jeden Typ eine andere Default-Meldung ausgegeben. void set_virus_messages(string *messages) Jede Minute werden str Punkte von den HP's des Spielers abgezogen, dabei wird eine Meldung aus messages ausgegeben. Default: ein paar Meldungen fuer eine Grippe. void set_vanishing_virus() Der Virus ist nach Aufruf dieser Funktion kein Autoloader mehr. Nicht besonders sinnvoll. void set_virus_shadow_path(string shadow_path) Damit kann man dem Spieler noch einen Shadow verpassen, der weitere Krankheitseffekte hervorruft. Wie Funktioniert das mit dem Shadow? ==================================== Ein Beispiel ist weiter unten... Mit set_virus_shadow_path() kann man den Pfad auf den passenden Shadow setzen. Bei Ansteckung bekommt das Opfer einen Clone dieses Shadows uebergeworfen. Bei jeder 'Krankheitsaktion' wird in diesem Shadow die Funktion void do_virus_shadow_action() aufgerufen, hier koennen alle moeglichen Ausgaben erzeugt werden. Die Funktion heal_virus() entfernt den Shadow wieder. Mit query_virus_shadow() bekommt man das Shadow-Objekt, mit query_virus_shadow_path() den Filenamen. Beispiel eines Virus-shadows (Uebelkeit) aus der Hexengilde =========================================================== (wichtig ist, dass im Virus set_virus_messages(0) gesetzt wird, da sonst sowohl der Virus als auch der Shadow Meldungen ausgeben) inherit "/i/shadow"; int has_enough_fp(int i) { return 1; } int has_enough_wp(int i) { return 1; } int has_enough_alc(int alc) { return 1; } // Das Opfer kann nichts mehr Trinken/Essen, und kein Alkohohl void do_virus_shadow_action() { switch( random(9) ) { // Meldung an an alle anderen und das Opfer case 0: query_shadow_owner()->send_message( MT_LOOK|MT_NOISE, MA_UNKNOWN, Der(query_shadow_owner())+" muss sich uebergeben.\n", "Du musst Dich uebergeben.\n", query_shadow_owner() ); if( query_shadow_owner()->query_fp() > 0 ) query_shadow_owner()->add_fp(-random(50)); if( query_shadow_owner()->query_wp() > 0 ) query_shadow_owner()->add_wp(-random(50)); break; // Meldung an alle ausser dem Opfer case 1: query_shadow_owner()->send_message( MT_LOOK, MA_UNKNOWN, Der(query_shadow_owner())+" hat ploetzlich ein " "schmerzverzerrtes Gesicht.\n" ); // add_headache() gibt selber Meldungen an das Opfer aus! query_shadow_owner()->add_headache(1); // Meldung nur an das Opfer case 2: query_shadow_owner()->send_message_to(query_shadow_owner(), MT_NOTIFY, MA_UNKNOWN, "Dir ist schlecht.\n"); break; case 3: [...] } } Und nun? ======= Schoen die Klappe halten, damit niemand rausbekommt, von wem dieser miese Virus stammt :).