MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame^] | 1 | // (c) by Padreic (Padreic@mg.mud.de) |
| 2 | |
| 3 | #include "../files.h" |
| 4 | #include <combat.h> |
| 5 | #include <moving.h> |
| 6 | #include <new_skills.h> |
| 7 | #include "/p/zauberer/zauberer.h" |
| 8 | |
| 9 | inherit NPC("stdnpc"); |
| 10 | |
| 11 | string info_tarnzauber() |
| 12 | { |
| 13 | object ob; |
| 14 | if (present("\ntarnzauber", PL)) |
| 15 | return "sagt: Ich habe Dich doch bereist verzaubert.\n"; |
| 16 | ob=clone_object(OBJ("tarnzauber")); |
| 17 | ob->move(PL, M_NOCHECK); |
| 18 | ob->Initialize(PL); |
| 19 | return "sagt: Nun gut, so sei es...\n" |
| 20 | +"macht eine weite Handbewegung und Du fuehlst wie Du Dich verwandelst.\n" |
| 21 | +"sagt: Viel Glueck!"; |
| 22 | } |
| 23 | |
| 24 | void create() |
| 25 | { |
| 26 | ::create(); |
| 27 | SetProp(P_SHORT, "Ulinia die Waldfee"); |
| 28 | SetProp(P_LONG, |
| 29 | BS("Ueber dem Teich schwebt Ulinia die Waldfee. Ihr langes goldenes Haar weht " |
| 30 | +"leicht im Wind und das einzige was sie bedeckt, ist ein leichtes Blaetterkleid " |
| 31 | +"das ihre weiblichen Rundungen ausserordentlich gut zur Geltung bringt. " |
| 32 | +"In der Hand haelt sie einen kleinen Zauberstab, mit dem sie hoch ueber allem thront.")); |
| 33 | SetProp(P_NAME, "Ulinia"); |
| 34 | SetProp(P_ARTICLE, 0); |
| 35 | SetProp(P_GENDER, FEMALE); |
| 36 | SetProp(P_LEVEL, 80); |
| 37 | SetProp(P_ATTRIBUTES, (["int":80,"con":40,"str":16,"dex":50]) ); |
| 38 | SetProp(P_DISABLE_ATTACK, -10000); // is nich :) |
| 39 | SetProp(P_BODY, 80); |
| 40 | SetProp(P_MAX_SP, 2000); |
| 41 | SetProp(P_SP, 2000); |
| 42 | SetProp(P_MAX_HP, 800); |
| 43 | SetProp(P_HP, 800); |
| 44 | SetProp(P_ALIGN, 400); |
| 45 | SetProp(P_RACE, "Fee"); |
| 46 | SetProp(P_SIZE, 160+random(16)); |
| 47 | SetProp(P_ALCOHOL, 0); |
| 48 | SetProp(P_CORPSE, OBJ("feenleiche")); |
| 49 | SetProp(P_MAX_ALCOHOL, 0); // kein rauschen :) |
| 50 | AddAdjective("wunderschoen"); |
| 51 | AddId(({"fee", "waldfee", "ulinia", WALDID("fee")})); |
| 52 | SetProp(P_HANDS, ({" mit ihren zarten Haenden", 150, DT_BLUDGEON}) ); |
| 53 | SetProp(P_SKILL_ATTRIBUTE_OFFSETS, ([SA_SPELL_PENETRATION: 250])); |
| 54 | SetProp(P_XP, 800*200*5*2); |
| 55 | SetProp(P_GUILD, "zauberer"); |
| 56 | SetProp(P_Z_NO_MATERIAL, 1); |
| 57 | SetProp(P_DEFAULT_INFO, "schweigt und laechelt Dich einfach nur freundlich an.\n"); |
| 58 | AddInfo(({"quest", "hilfe", "aufgabe", "dunkelelfenamulett", "delfenamulett"}), |
| 59 | "Ohh in der Tat haette ich da eine Aufgabe fuer Dich, aber ich muss Dich " |
| 60 | +"warnen, das sie nicht ganz ungefaehrlich ist.\n" |
| 61 | +"Ein befreundeter Kobold berichtete mir von einem lange verschollenen Buch, " |
| 62 | +"dass in der Bibliothek der Dunkelelfen wieder aufgetaucht ist. In diesem " |
| 63 | +"Buch ist unter anderem von einem alten Amulett die Rede, mit dessen Hilfe " |
| 64 | +"die Dunkelelfen ihre alte Macht wiedererlangen und erneut Furcht und " |
| 65 | +"Schrecken ueber das gesamte Morgengrauen bringen koennten. " |
| 66 | +"Wenn Du die Gefahr nicht scheust, waere es ausserordentlich nett wenn Du " |
| 67 | +"Dich nach Zzerenzzen begeben wuerdest und dort nach dem Amulett suchst.\n" |
| 68 | +"Solltest Du das Amulett tatsaechlich finden, so ist es wichtig das es " |
| 69 | +"auf keinen Fall in die Hand der Dunkelelfen geraet und zerstoert wird.", |
| 70 | "antwortet: "); |
| 71 | AddInfo("gefahr", |
| 72 | "Nun Du wirst Dich mitten unter die Dunkelelfen begeben muessen um " |
| 73 | +"zu ihrer Bibliothek gelangen zu koennen. In Zzerenzzen wirst Du " |
| 74 | +"hierbei voellig auf Dich allein gestellt sein.\n" |
| 75 | +"Alles was ich hierbei fuer Dich tun kann, ist einen Tarnzauber zu " |
| 76 | +"sprechen der Dich aeusserlich in einen Dunkelelfen verwandelt. " |
| 77 | +"Aber vorsicht, spaetestens wenn Du Dich in einen Kampf verwickelst, " |
| 78 | +"wird sich der Zauber loesen.", "sagt: "); |
| 79 | AddInfo("tarnzauber", #'info_tarnzauber, ""); |
| 80 | AddInfo(({"furcht", "schrecken", "macht"}), |
| 81 | "Ja frueher waren die Dunkelelfen sehr sehr maechtig und alle " |
| 82 | +"friedliebenden Geschoepfe dieser Welt sollten hoffen das sie " |
| 83 | +"nie wieder ihre alte Macht erlangen werden.", "antwortet: "); |
| 84 | AddInfo("amulett", |
| 85 | "Nun leider weiss ich auch nichts genaues ueber das Amulett. Ich bin " |
| 86 | +"nicht mal sicher ob es existiert oder je existiert hat. Aber sollte " |
| 87 | +"es noch existieren, muss es auf jeden Fall zerstoert werden!", "sagt: "); |
| 88 | AddInfo("kobold", |
| 89 | "Ich habe versprochen ihn nicht zu verraten und so kann ich Dir nichts " |
| 90 | +"weiter ueber ihn sagen.", "antwortet: "); |
| 91 | AddInfo(({"buch", "bibliothek"}), |
| 92 | "Ich denke am besten begibst Du Dich in die Hoehle des Loewen und versuchst " |
| 93 | +"in der Bibliothek der Dunkelelfen selbst ein Blick in dies Buch zu werfen.\n" |
| 94 | +"Wenn ich das noch recht in Erinnerung habe, handelt es sich hierbei um " |
| 95 | +"das Buch eines Dunkelelfen names Teyrion.", "sagt: "); |
| 96 | AddInfo("loewen", "Das ist doch bloss eine Redewendung.", "sagt: "); |
| 97 | AddInfo("redewendung", "Na das sagt man halt so...", "sagt: "); |
| 98 | AddInfo(({"hoehle", "zzerenzzen"}), |
| 99 | "Der Eingang nach Zzerenzzen liegt in der naehe von Wilhelmsburg gut hinter " |
| 100 | +"einem Wasserfall versteckt.", "sagt: "); |
| 101 | ModifySkill("verletze", |
| 102 | ([SI_SKILLABILITY:10000, SI_SPELLCOST:0, |
| 103 | SI_SPELLFATIGUE:0, SI_NO_CONSEQUENCES:10000, |
| 104 | SI_SKILLRESTR_USE:([P_GUILD_LEVEL:0,SR_FREE_HANDS:0]), |
| 105 | SI_ARMOUR_RESTR:0]),0,"zauberer"); |
| 106 | SetProp(P_GUILD, 0); |
| 107 | SetProp(P_RESISTANCE_STRENGTHS, |
| 108 | ([DT_UNHOLY: 0.25, |
| 109 | DT_POISON: 0.15, |
| 110 | DT_MAGIC: -0.3]) ); |
| 111 | |
| 112 | AddItem(OBJ("zauberstab"), CLONE_WIELD); |
| 113 | AddItem(OBJ("kleid"), CLONE_WEAR); |
| 114 | if (file_size(SAECKCHEN)>0) AddItem(SAECKCHEN, CLONE_NEW); |
| 115 | } |
| 116 | |
| 117 | void Attack(object enemy) |
| 118 | { |
| 119 | int normal_speed; |
| 120 | normal_speed=(enemy->QueryProp(P_SKILL_ATTRIBUTE_OFFSETS)||([]))[SA_SPEED]||100; |
| 121 | if (enemy && enemy->QuerySkillAttribute(SA_SPEED) > normal_speed) { |
| 122 | write("Die Fee macht eine beruhigende Handbewegung und ploetzlich fuehlst Du Dich\n" |
| 123 | +"ruhig und Du merkst wie Du allmaehlich wieder langsamer wirst...\n"); |
| 124 | enemy->ModifySkillAttribute(SA_SPEED, -20, 180); |
| 125 | } |
| 126 | if (enemy) ::Attack(enemy); |
| 127 | SetProp(P_GUILD, "zauberer"); |
| 128 | command("verletze mit "+({"feuer", "magie", "eis", "wasser", "gift", |
| 129 | "wind", "saeure", "laerm"})[random(8)] ); |
| 130 | SetProp(P_GUILD, 0); |
| 131 | } |
| 132 | |
| 133 | int Defend(int dam, mixed dts, mixed spell, object enemy) |
| 134 | { |
| 135 | int normal_speed; |
| 136 | normal_speed=(enemy->QueryProp(P_SKILL_ATTRIBUTE_OFFSETS)||([]))[SA_SPEED]||100; |
| 137 | if (enemy && enemy->QuerySkillAttribute(SA_SPEED) > normal_speed) { |
| 138 | write(Name(WER)+" macht eine beruhigende Handbewegung und ploetzlich fuehlst Du Dich\n" |
| 139 | +"ruhig und Du merkst wie Du allmaehlich wieder langsamer wirst...\n"); |
| 140 | enemy->ModifySkillAttribute(SA_SPEED, -20, 180); |
| 141 | } |
| 142 | |
| 143 | if ((!spell || (mappingp(spell) && spell[SP_PHYSICAL_ATTACK])) && !random(3)) { |
| 144 | tell_room(environment(), Name(WER)+" weicht schnell einen Schritt zurueck und weicht Deinem Angriff aus.\n"); |
| 145 | dam=0; |
| 146 | } |
| 147 | return (int)::Defend(dam, dts, spell, enemy); |
| 148 | } |
| 149 | |
| 150 | void NotifyPlayerDeath(object who, object killer, object lost_exp) |
| 151 | { |
| 152 | if (!who || killer!=ME) return; // uninteressant |
| 153 | log_file("padreic/kill", ctime(time())+" "+capitalize(getuid(who))+" getoetet von /zauberwald/ulinia\n"); |
| 154 | } |
| 155 | |
| 156 | void die() |
| 157 | { |
| 158 | log_file("padreic/kill", ctime(time())+" Ulinia wurde von "+get_killer()+" getoetet.\n"); |
| 159 | ::die(); |
| 160 | } |