summaryrefslogtreecommitdiff
path: root/npc/items
diff options
context:
space:
mode:
authorJesusaves <cpntb1@ymail.com>2019-05-04 02:12:58 -0300
committerJesusaves <cpntb1@ymail.com>2019-05-04 02:12:58 -0300
commit38adc7b0500091fabadba5281f5526ff7fd60966 (patch)
tree978fd732e57d46ad15f1e01f048582c939d9047c /npc/items
parent120666894beaa238845cd146409afa0c06a17690 (diff)
downloadserverdata-38adc7b0500091fabadba5281f5526ff7fd60966.tar.gz
serverdata-38adc7b0500091fabadba5281f5526ff7fd60966.tar.bz2
serverdata-38adc7b0500091fabadba5281f5526ff7fd60966.tar.xz
serverdata-38adc7b0500091fabadba5281f5526ff7fd60966.zip
Mechanic-wise, implement Warp Crystals and ensure they work
Diffstat (limited to 'npc/items')
-rw-r--r--npc/items/teleporter.txt102
1 files changed, 30 insertions, 72 deletions
diff --git a/npc/items/teleporter.txt b/npc/items/teleporter.txt
index 7c5ad6c4f..887121a98 100644
--- a/npc/items/teleporter.txt
+++ b/npc/items/teleporter.txt
@@ -8,86 +8,44 @@
- script Warp Crystal NPC_HIDDEN,{
close;
- // Checks if you can warp
- function loftel_check {
- getmapxy(.@m$, .@x, .@y, 0);
- .@is_hurt=(readparam(Hp) < readparam(MaxHp)*9/10); // <90% hp
- .@is_town=(getmapflag(.@m$, mf_town));
- return (.@is_hurt && !.@is_town);
- }
-
- // Calculate time remaining
- // (time, .@x)
- function loftel_time {
- return gettimetick(2)+max((60*getarg(0))-(getarg(1)*60), 30);
- }
-
-L_Cooldown:
+function Cooldown {
mesn;
- mesc l("This teleporter is currently recharging.");
+ mesc l("Successive warps cause time-space distortions and thus, are not allowed.");
mesc l("You can use it again in @@.", FuzzyTime(TELEPORTER_TIME));
+ getitem @itemid, 1;
close;
+}
+
+function ReturnItem {
+ getitem @itemid, 1;
+ end;
+}
OnUse:
+ // Receives @dest$
if (TELEPORTER_TIME > gettimetick(2))
- goto L_Cooldown;
- if (readparam(Hp) < readparam(MaxHp)) {
- dispbottom l("You are hurt, and cannot use this.");
- end;
- }
+ Cooldown();
if (BaseLevel < 20) {
dispbottom l("This is too powerful to you. Get level 20 before attempting to use.");
- end;
- }
-
- mesn;
- mesc l("Ozthokk, a great sage from the Land Of Fire, holds secrets of time and space travel.");
- mesc l("This is not magic, it is science!");
- mes "";
- mesc l("PS. Additional reagents may be required for warps.");
- next;
-
- .@x=(reputation("LoF")/10)+min(10, countitem(TimeFlask)-1); // up to 10 minutes reduction from quests, and 10 from time flasks
-
- select
- l("Don't warp"),
- l("Land Of Fire Village (@@m)", 50-.@x),
- rif(TELEPORTERS & TP_FROST, l("Frostia (@@m)", 360-.@x)),
- rif(TELEPORTERS & TP_HALIN, l("Halinarzo (@@m)", 360-.@x)),
- l("Save Point (@@m)", 30-.@x);
-
- if (@menu == 1)
- close;
-
- switch (@menu) {
- case 1:
- }
- if (loftel_check()) {
- dispbottom l("You are hurt, and cannot use this.");
- }
- doevent "shake::OnGM";
- switch (@menu) {
- case 2:
- warp "017-1", 120, 89;
- TELEPORTER_TIME=loftel_time(50, .@x);
- LOCATION$="LoF";
- break;
- case 3:
- warp "024-1", 155, 82;
- TELEPORTER_TIME=loftel_time(360, .@x);
- LOCATION$="Frostia";
- break;
- case 4:
- warp "009-1", 113, 91;
- TELEPORTER_TIME=loftel_time(360, .@x);
- LOCATION$="Halin";
- break;
- case 5:
- warp "Save", 0, 0;
- TELEPORTER_TIME=loftel_time(30, .@x);
- LOCATION$="Save";
- break;
+ ReturnItem();
}
- closedialog;
+ // TODO: Are you already at target point?
+
+ // It have at least 30% chance to break
+ // Chances begin at 100%, and lower in 0.01% each second
+ // It will never be below 30%, which happens after 7000 seconds
+ .@adj_breakrate=max(3000, 10000-(gettimetick(2)-TELEPORTER_TIME) );
+ debugmes "Adjusted break ratio: %d", .@adj_breakrate;
+ if (rand(0,10000) > .@adj_breakrate)
+ getitem @itemid, 1;
+ else
+ getitem BrokenWarpCrystal, 1;
+
+ // Apply Cooldown, same variable as LoF Teleporter
+ TELEPORTER_TIME=gettimetick(2)+300;
+
+ // Save new location and warp you there
+ EnterTown(@dest$);
+ doevent "Emergency Exit::OnVisitLX";
end;
}