summaryrefslogtreecommitdiff
path: root/npc/functions/foraging.txt
diff options
context:
space:
mode:
Diffstat (limited to 'npc/functions/foraging.txt')
-rw-r--r--npc/functions/foraging.txt148
1 files changed, 148 insertions, 0 deletions
diff --git a/npc/functions/foraging.txt b/npc/functions/foraging.txt
new file mode 100644
index 00000000..f67af736
--- /dev/null
+++ b/npc/functions/foraging.txt
@@ -0,0 +1,148 @@
+// rEvolt functions.
+// Description:
+// Foraging functions.
+//
+// Just a timer and some graphical effects, don't move while harvesting
+// Also need to know the region for the obtainable forage
+// Foraging:
+// Stone = 100 + (FORAGE_LVL * 1000)
+// Pibery = 0 + (FORAGE_LVL * 1000)
+// Manana = -100 + (FORAGE_LVL * 1000)
+// ...
+// Level also reduces the time you must wait.
+// For drop chance, luck is added to the level
+// And you gain some luck experience when you get a good roll?
+// What about other stats? Agility and Vitality in special.
+// We also need int and dex to learn cooking >.<
+// How about reading books to get INT? (on Library, and once by reading WH Books)
+// Some sort of training which you pay some esperins and gain:
+// DEX (archery, might reuse Gwendolyn game)
+// AGI (running, might reuse Miriam game)
+// STR (helping the dock workers)? VIT (resistance)?
+
+function script foraging {
+ .@npc$ = strnpcinfo(0); // the full name of the spot
+
+ // Array of (loot, base chance)
+ // All rolls are standard RNG rolls (10.000)
+ // Negative is OK
+ if (getvariableofnpc(.loot_ids[1], .@npc$) < 1)
+ {
+ // default loot: <array: 0, {[loot, probability]..}>
+ setarray getvariableofnpc(.loot_ids[1], .@npc$),
+ StoneProjectile, 9500,
+ StoneProjectile, 8100,
+ StoneProjectile, 7000,
+ StoneProjectile, 6400,
+ Piberries, 4500,
+ Blueberries, 3800,
+ Moss, 2400,
+ Acorn, 1800,
+ Plushroom, 1200,
+ MauveHerb, 1000,
+ AlizarinHerb, 900,
+ CobaltHerb, 900,
+ GambogeHerb, 900,
+ //PumpkinSeeds, 400,
+ SilkCocoon, 100,
+ Curshroom, 0,
+ BugLeg, -100,
+ Manana, -300,
+ GrassSeeds, -500,
+ RawLog, -800,
+ HardSpike, -1200,
+ Carrot, -1800;
+ }
+
+ // Cooldown
+ if (@last_used[getnpcid(.@npc$)] > gettimetick(2) && !is_dev()) {
+ dispbottom l("You just foraged this spot, please wait %s.", FuzzyTime(@last_used[getnpcid(.@npc$)], 2, 2));
+ end;
+ }
+
+ getmapxy(.@m$, .@x, .@y, 0);
+ sit();
+ dispbottom l("You started foraging. Do not stand nor move until you're done.");
+ // Wait time. Foraging level can make foraging up to 67% faster
+ .@wait = 10+rand2(30);
+ .@wait = (.@wait*1000) - (min(.@wait*2, LVL_FORA) * 300);
+
+ // TODO: Play a Foraging Animation or it is just boring
+ freeloop(true);
+ for (.@t = 0; .@t < .@wait; .@t += 500) {
+ if (!issit()) {
+ dispbottom l("In hurry, you give up foraging.");
+ end;
+ }
+ sleep2(500);
+ }
+ freeloop(false);
+
+ // Did you move?
+ if (!isin(.@m$, .@x, .@y, 0)) {
+ dispbottom l("You left your foraging spot.");
+ end;
+ }
+
+ // Let the bush recover (5 minutes)
+ @last_used[getnpcid(.@npc$)] = gettimetick(2) + 300;
+
+ // Give you the forage
+ .@lcount=0;
+ .@loots=getarraysize(getvariableofnpc(.loot_ids[0], .@npc$));
+ copyarray(.@loot, getvariableofnpc(.loot_ids[0], .@npc$), .@loots);
+ .@buff = min(100, LVL_FORA)*((readbattleparam(getcharid(3), UDT_LUK)/2)+1);
+ .@buff = min(10000, .@buff);
+ freeloop(true);
+ for (.@i = .@loots; .@i > 0; .@i -= 2) {
+ if (.@i == 1) continue;
+ // Foraging level multiplies luck with bonus
+ // But getting a loot inflict a 5% penalty on next loot roll
+ .@luck = rand2(10000) + (.@lcount*500) - .@buff;
+ if (.@luck < .@loot[.@i-1]) {
+ getitem .@loot[.@i-2], 1;
+ .@lcount+=1;
+ }
+ }
+ freeloop(false);
+
+ dispbottom l("You have foraged some items!");
+ EXP_FORA+=1;
+ return;
+}
+
+
+// This should not be here
+000-1,73,113,0 script #forage001 NPC_NO_SPRITE,{
+ foraging();
+OnInit:
+ .distance=1;
+ end;
+}
+
+// Drasil spots
+000-1,33,112,0 duplicate(#forage001) #forage002 NPC_NO_SPRITE
+000-1,67,97,0 duplicate(#forage001) #forage003 NPC_NO_SPRITE
+000-1,55,90,0 duplicate(#forage001) #forage004 NPC_NO_SPRITE
+000-1,44,62,0 duplicate(#forage001) #forage005 NPC_NO_SPRITE
+000-1,26,36,0 duplicate(#forage001) #forage006 NPC_NO_SPRITE
+000-1,42,25,0 duplicate(#forage001) #forage007 NPC_NO_SPRITE
+000-1,50,26,0 duplicate(#forage001) #forage008 NPC_NO_SPRITE
+000-1,76,29,0 duplicate(#forage001) #forage009 NPC_NO_SPRITE
+000-1,81,40,0 duplicate(#forage001) #forage010 NPC_NO_SPRITE
+000-1,85,47,0 duplicate(#forage001) #forage011 NPC_NO_SPRITE
+
+// Artis spots
+001-1,181,33,0 duplicate(#forage001) #forage012 NPC_NO_SPRITE
+001-1,178,59,0 duplicate(#forage001) #forage013 NPC_NO_SPRITE
+001-1,156,30,0 duplicate(#forage001) #forage014 NPC_NO_SPRITE
+001-1,156,33,0 duplicate(#forage001) #forage015 NPC_NO_SPRITE
+001-1,115,31,0 duplicate(#forage001) #forage016 NPC_NO_SPRITE
+001-1,112,37,0 duplicate(#forage001) #forage017 NPC_NO_SPRITE
+001-1,81,44,0 duplicate(#forage001) #forage018 NPC_NO_SPRITE
+001-1,72,62,0 duplicate(#forage001) #forage019 NPC_NO_SPRITE
+001-1,103,69,0 duplicate(#forage001) #forage020 NPC_NO_SPRITE
+001-1,91,92,0 duplicate(#forage001) #forage021 NPC_NO_SPRITE
+001-1,81,117,0 duplicate(#forage001) #forage022 NPC_NO_SPRITE
+001-1,95,119,0 duplicate(#forage001) #forage023 NPC_NO_SPRITE
+