// Evol scripts. // Author: // gumi // The Moubootaur Legends Development Team // Quest states: // [1] 0 - cannot do the quest // [1] 1 - can do the quest // [1] 2 - talked to inspector (1) <= start // [1] 3 - talked to old woman (1) // [1] 4 - talked to old woman (2) // [1] 5 - talked to inspector (2) // [1] 6 - talked to troupe leader (1) // [1] 7 - talked to inspector (3) // [1] 8 - talked to old man // [1] 9 - talked to old woman (3) // [1] 10 - talked to inspector (4) // [1] 11 - talked to old woman (4) // [1] 12 - talked to malek // [1] 13 - searched the bookcase // [1] 14 - talked to inspector (5) // [1] 15 - talked to troupe leader (2) <= reward // [1] 16 - talked to inspector (6) <= reward, end // [2] unused // [3] unused // [t] unused // Description: // Hurnscald Nurse. Robberies in Hurnscald. 008-2-12,28,30,0 script Nurse NPC_NURSE_LEGACY,{ function bloodDonor; .@q2=getq2(HurnscaldQuests_BloodDonor); speech(4, l("How can I help you?")); // XXX: this npc used to teach the resist poison skill, do we still want that? selectd( l("Oooh, these wounds! They hurt so much!"), l("I don't feel so well, I might be sick."), rif(.@q2 < gettimetick(2), l("I would like to donate blood.")), l("No, I'm fine."), rif(getq(.quest_inspector) == 2, l("Have you seen anything out of the ordinary?"))); switch (@menu) { case 1: if (BaseLevel > .heal_max_level) { speech( l("I'm sorry but I'm here only to help young adventurers and the town residents."), l("Your level is already higher than %d.", .heal_max_level), l("You can get some rest at the inn near here.")); close; } speech(4, l("Here, let me heal you.")); // Jesusalva: I don't trust npcskill() npcskill(AL_HEAL, .heal_skill_level, .heal_npc_stats, .heal_npc_level); speech( l("There you go, like new.")); break; case 2: speech( l("Then you should better see the doctor."), l("He is usually in his office on the 3rd floor.")); break; case 3: bloodDonor(); break; case 4: speech( l("Then I would ask you to leave."), l("There are people who really need our help.")); break; case 5: speech( l("I'm too busy here to observe the town.")); break; } close; function bloodDonor { .@q2=getq2(HurnscaldQuests_BloodDonor); .@q3=getq3(HurnscaldQuests_BloodDonor); // Cheating??! if (.@q2 > gettimetick(2)) kick(getcharid(3)); // Anyway, ML code comes here, adapted for TMW mesc l("Donating blood will BLOCK YOUR MOVEMENT for three minutes."); mesc l("Do not disconnect while waiting. You need 100% HP to donate."); next; // Always show Info if it is your first time donating blood @menu = 1; if (.@q3) { select l("Info"), rif(readparam(Hp) == readparam(MaxHp), l("Yes, please use my blood to save lifes.")), l("I changed my mind"); mes ""; } if (@menu == 3) return; if (@menu == 1) { mesn; mesq l("Donating blood is a noble act, which allows to save lifes."); next; mesn; mesq l("When people loses too much blood, they die, unless we can lend them somebody's else blood."); next; mesn; mesq l("Not everyone can be a blood donor. For example, you must be healthy."); mesq l("You can find more info about this on these links:"); mes ""; mes "[@@https://www.blood.co.uk/|https://www.blood.co.uk/@@]"; mes "[@@https://www.nhsbt.nhs.uk/what-we-do/blood-services/blood-donation/|https://www.nhsbt.nhs.uk/what-we-do/blood-services/blood-donation/@@]"; mes l("France: [@@https://dondesang.efs.sante.fr/|https://dondesang.efs.sante.fr/@@]"); mes l("Brazil: [@@http://www.prosangue.sp.gov.br/home/Default.html|http://www.prosangue.sp.gov.br/home/Default.html@@]"); if (readparam(Hp) < readparam(MaxHp)) return; next; mesc l("Donate blood?", 1); if (askyesno() == ASK_NO) return; } // Donate blood mesn; mesq l("This will take only a short while."); next; setq1 HurnscaldQuests_BloodDonor, 2; percentheal -90, 0; addtimer(180000, "Nurse::OnDonationComplete"); warp "008-2-14", 31, 27; setpcblock(PCBLOCK_ATTACK|PCBLOCK_SKILL|PCBLOCK_USEITEM|PCBLOCK_MOVE, true); dispbottom l("Any movement/skill/item will be without effect until time is up."); closedialog; return; } OnDonationComplete: if (checkpcblock() & PCBLOCK_ATTACK) setpcblock(PCBLOCK_ATTACK|PCBLOCK_SKILL|PCBLOCK_USEITEM|PCBLOCK_MOVE, false); warp "008-2-12", 30, 30; percentheal 100, 0; // Experience gain is based on HP getexp readparam(Hp)*2, readparam(Hp)/100; .@q3=getq3(HurnscaldQuests_BloodDonor)+1; // Cooldown: 60*60*24*30: 30 days setq HurnscaldQuests_BloodDonor, 1, gettimetick(2)+(2592000), .@q3; if (BaseLevel >= 30) getitem Bread, 1; if (BaseLevel >= 50) getitem ChocolateBar, 1; if (BaseLevel >= 70) getitem BottleOfWater, 1; mesn; mesq l("Thanks for donating blood. You can donate again in 30 days."); mesq l("You should eat and drink water after donating blood. Thanks for saving lifes!"); close; OnInit: .heal_max_level = 20; // she will only heal low level players .heal_skill_level = 10; // what level of the healing skill to use .heal_npc_stats = 99; // what stat points the NPC has .heal_npc_level = 60; // what level the npc has .quest_inspector = HurnscaldQuests_Inspector; .quest_debug = .quest_inspector; .distance = 3; end; }