// Evol functions.
// Authors:
// omatt
// Travolta
// Description:
// Fishing functions.
// Variable
// .dir
// DOWN Never try or pulled too late
// UP Bait dropped
// LEFT Fish bite bait
//
// player log on .dir is DOWN, start by choose bait menu
// player chooses bait, script addtimer in npc .dir is UP
// if player pulls before signal npc, bait is lost, set .bait to DOWN goto choose bait
// if player pulls after pull delay max, bait is lost, set .bait to DOWN goto choose bait
// npc signal .dir is LEFT
// player pulls between npc signal and pulls delay max, got the fish, set .dir to DOWN goto choose bait
function script fishingspot {
if (getnpcdir(getarg(0)) != DOWN && @occupy == false)
{
npctalkonce l("This fishing spot is already being used!");
close;
}
// Skip the narator when we are in fishing
if (getnpcdir(getarg(0)) == DOWN)
{
narrator 4, l("You see some fish reflecting the sun on the surface of the water.");
}
return;
}
function script fishing {
.@wait_time_min = 4000;
.@wait_time_max = 18000;
.@pull_rand_max = 800;
.@fish_id = CommonCarp;
.@rare_fish_chance = 25;
if (countitem(FishingRod) < 1)
{
narrator
l("You don't have any @@.", getitemlink(FishingRod));
return -1;
}
switch (getnpcdir(getarg(0)))
{
case UP:
@occupy = false;
setnpcdir getarg(0), DOWN;
deltimer getarg(0) + "::OnBiteBait";
deltimer getarg(0) + "::OnRemoveBait";
narrator l("You pulled too soon and lost the bait.");
close;
case LEFT:
@occupy = false;
deltimer getarg(0) + "::OnRemoveBait";
setnpcdir getarg(0), DOWN;
getmapxy (.@mapbis$, .@xbis, .@ybis, 0);
// Leave spot, lost the bait
if (.@xbis != @x || .@ybis != @y || !compare (@map$, .@mapbis$))
{
narrator l("You left your fishing spot!");
close;
}
// RNG to obtain a rare fish
.@timediff = gettimetick(0) - @tick;
if (rand(.@rare_fish_chance) == 0)
{
.@fish_id = GrassCarp;
}
// RNG to obtain a fish
if (rand(.@timediff) <= .@pull_rand_max)
{
narrator l("You caught a @@!", getitemname(.@fish_id));
inventoryplace .@fish_id, 1;
getitem .@fish_id, 1;
}
else
{
narrator l("You pulled too late and lost a @@...", getitemname(.@fish_id));
}
close;
default:
break;
}
OnChooseBait:
if (Fishing_Tick > gettimetick(2) - 20)
{
narrator l("This fishing spot has just been used, give it a rest.");
close;
}
setarray .@bait_ids[0], SmallTentacles, Bread, Aquada,
UrchinMeat, TortugaTongue,
Tentacles;
.@curr_wait_times = 0;
.@sel$ = "";
.@cnt = 0;
for (.@i = 0; .@i < getarraysize(.@bait_ids); .@i++)
if (countitem(.@bait_ids[.@i]) > 0)
{
setarray .@user_items[.@cnt], .@bait_ids[.@i];
.@sel$ = .@sel$ + getitemname(.@bait_ids[.@i]) + ":";
.@cnt += 1;
}
.@sel$ = .@sel$ + l("Nothing, I changed my mind.");
if (!.@cnt)
{
.@bait_names$ = getitemlink(.@bait_ids[0]);
for (.@i = 1; .@i < getarraysize(.@bait_ids); .@i++)
.@bait_names$ = .@bait_names$ + ", " + getitemlink(.@bait_ids[.@i]);
narrator
l("You don't have any food to use as bait."),
l("You need at least one of these: ") + .@bait_names$;
return -2;
}
narrator 2,
l("What will be the bait for the fish?");
.@idx = select(.@sel$);
if (.@idx == .@cnt + 1)
{
narrator 1,
l("You take your fishing rod and leave.");
return 0;
}
if (@occupy == true)
{
narrator 1,
l("Somebody took your place on this spot!"),
l("You take your fishing rod and leave.");
return 0;
}
@occupy = true;
// The player uses this spot, his bait is ready, he just has to wait for the signal.
closedialog;
setnpcdir getarg(0), UP;
Fishing_Tick = gettimetick(2);
.@bait = .@user_items[.@idx - 1];
delitem .@bait, 1;
npctalk3 l("Wait for the bait to sink underwater.");
getmapxy (@map$, @x, @y, 0);
.@delay = rand(.@wait_time_min, .@wait_time_max);
addtimer .@delay, getarg(0) + "::OnBiteBait";
addtimer (.@delay + 5000), getarg(0) + "::OnRemoveBait";
close;
}