summaryrefslogtreecommitdiff
path: root/npc/functions
diff options
context:
space:
mode:
Diffstat (limited to 'npc/functions')
-rw-r--r--npc/functions/hub.txt116
1 files changed, 116 insertions, 0 deletions
diff --git a/npc/functions/hub.txt b/npc/functions/hub.txt
new file mode 100644
index 000000000..e3ee6d26c
--- /dev/null
+++ b/npc/functions/hub.txt
@@ -0,0 +1,116 @@
+// TMW2 scripts.
+// Authors:
+// Jesusalva
+// TMW Org.
+// Description:
+// HUB functions (Login, Logout, Death)
+
+// HUB_Login ()
+function script HUB_Login {
+ getmapxy(.@mapa$, .@a,.@b, 0);
+
+ // Login on Blue Sage Workshop/Library
+ if (.@mapa$ == "020-7-1") {
+ addtimer(1000, "#BlueSageHUB::OnCycle");
+ }
+
+ return;
+}
+
+// HUB_Logout ( {dead} )
+function script HUB_Logout {
+ .@dead=getarg(0, false);
+ getmapxy(.@mapa$, .@a,.@b, 0);
+
+ // Vanished on Cindy Cave
+ if (.@mapa$ == "021-4" && strcharinfo(0) == $@CINDY_HERO$) {
+ recovery(getcharid(3));
+ warp any("010-1", "010-2"), 0, 0;
+ percentheal -100, -100;
+ sc_start2 SC_POISON, 1, 90, 10000;
+ } else if (.@mapa$ == "021-4") {
+ .@pl = getmapusers("021-4")-1;
+ if (.@pl < 1)
+ donpcevent("Cindy#Outside::OnCleanUp");
+ recovery(getcharid(3));
+ warp "Save", 0, 0;
+ }
+ // Logout while donating blood
+ if (getq(HurnscaldQuest_BloodDonor) == 2) {
+ slide 35, 28;
+ setpcblock(PCBLOCK_ATTACK|PCBLOCK_SKILL|PCBLOCK_ITEM|PCBLOCK_MOVE, false);
+ setq HurnscaldQuest_BloodDonor, 0, gettimetick(2)+3600; // one hour penalty
+ }
+ // Logout/Death on Nard's ship hold
+ if (.@mapa$ ~= "002-2" || .@mapa$ ~= "nard*") {
+ setq2 ShipQuests_Peter, 0;
+ setq3 ShipQuests_Peter, -1;
+ }
+ // Logout on botcheck area
+ if (.@mapa$ ~= "botcheck" && !.@dead) {
+ if (!is_staff())
+ atcommand "@jail "+strcharinfo(0);
+ }
+ // Died on Terranite Cave where exp penalty is lower
+ if (.@mapa$ == "015-6" && .@dead) {
+ @deathpenalty_override=2;
+ @deathpenalty_realvalue=readparam(BaseExp);
+ @deathpenalty_realvaljob=readparam(JobExp);
+ }
+ // First death produces a warning message
+ if (PC_DIE_COUNTER <= 1 && .@dead) {
+ dispbottom l("Dying outside a town square will cause EXP loss.");
+ }
+ // If you were travelling and died/logged out, cleaning is needed
+ if (@timer_navio_running) {
+ @timer_navio_running=0;
+ // Logged out? Correct your position to inside the ship
+ // Of course, this is messy... But still better than Save Point
+ if (!.@dead) {
+ if (.@mapa$ ~= "016-*")
+ warp "016-1", 28, 27;
+ else if (.@mapa$ ~= "002-*")
+ warp "002-1", 55, 40;
+ else
+ warp "Save", 0, 0;
+ }
+ }
+ // Crazyfefe hot fix
+ if (.@dead) {
+ // It was PK
+ if (killerrid > 2000000 && killerrid < 2100000) {
+ // PVP flag was off
+ if (!getmapflag(.@mapa$, mf_pvp) && !getmapflag(.@mapa$, mf_pvp_noparty) && !getmapflag(.@mapa$, mf_pvpnoguild)) {
+ recovery(getcharid(3));
+ warp .@mapa$, .@a, .@b;
+ dispbottom l("REVENGE TIME!");
+ .@trueid=getcharid(3);
+ //detachrid();
+ attachrid(killerrid);
+ setpcblock(PCBLOCK_ATTACK|PCBLOCK_SKILL|PCBLOCK_ITEM|PCBLOCK_COMMANDS, true);
+ sc_start SC_WALKSPEED,120000,50;
+ sc_end SC_CASH_PLUSEXP;
+ sc_end SC_OVERLAPEXPUP;
+ sc_start SC_OVERLAPEXPUP, 300000, -20;
+ dispbottom l("For cowardingly killing in a \"secure\" area, you will be severely punished.");
+ addtimer(15000, "#mobptsys::OnUnlock");
+ percentheal -88, -100;
+ detachrid();
+ attachrid(.@trueid);
+ }
+ }
+ }
+
+ // This allows code to override death penalty, just once:
+ // @deathpenalty_override
+ // Valid values: 1- No penalty. 2- Halved penalty.
+ // You must also set: @deathpenalty_realvalue and @deathpenalty_realvaljob
+ if (@deathpenalty_override && .@dead) {
+ if (is_staff())
+ debugmes("Old values: %d %d Current Values: %d %d", @deathpenalty_realvalue, @deathpenalty_realvaljob, readparam(BaseExp), readparam(JobExp));
+ addtimer(300, "#QuirinoHUB::OnNoPenaltyCommand");
+ }
+
+ return;
+}
+