diff options
Diffstat (limited to 'npc/functions/foraging.txt')
-rw-r--r-- | npc/functions/foraging.txt | 148 |
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 + |