Originally written for Sanctuary (was Adus over there). Saw a version was shared when Secrets released the gardening code some time back, but that wasn't the "improved" version. The code isn't the prettiest damn thing and I have since placed mines in a table and had it control objects, but, for those that would rather not mess with MySQL (it and I aren't exactly friends) here is the Perl only version:
Code:
###################################################################################################
### FILE: /quests/global/items/script_8556.pl
### AUTHOR: Ghanja
### DATE MODIFIED: 01-07-2015
### DEPENDENCIES: None
### NOTE: Please do not distribute without consent (nothing top secret here, just a courtesy thing)
### EverQuest Mining -- originally coded for Zerjz3 (Sanctuary)
###
$mineattempts = 12;
sub EVENT_ITEM_CLICK_CAST
{
my $primaryitemid;
my $itemgivenatmine;
$primaryitemid = $client->GetItemIDAt(13);
if ($primaryitemid == 35096) {
$itemgivenatmine = inMiningArea();
return if ($itemgivenatmine == 0);
if(isDepleted()) {
$client->Message(12, "This area looks mined out...");
return;
}
else {
quest::doanim(87);
quest::summonitem($itemgivenatmine);
}
$client->Message(9, "Clink, clink, clink, there might be something here you think!");
doMining();
}
else {
$client->Message(12, "That may work better if you place it in your primary hand!");
}
}
### [BETA LOGIC] Toss all this shit in a table revisit
############################################################################################################
### EDIT ONLY THIS PORTION OF THE SCRIPT -- CAREFUL! ###
############################################################################################################
###
### Hash key = zone #
### commonitem = most common item (is an array and can be only 1 itemid or many [more than you're likely to ever use]
### rareitem = rareitem rarer than common same applies as far as the array
### rarestitem = rarest item rarer than rare, oh oh almost had it!
### uberitem = like your chances to get this are shit but if you get it ohhh boy look out!
my %mine = (
# zone 75 - Paineel
75 => [
# area (starts at) 0
{
commonitem => [34238,22125,16976],
rareitem => [34238,9180,2381],
rarestitem => [34238,65599,10017],
uberitem => [10037],
x => 130,
y => 808,
z => 3
},
# area 1
{
commonitem => [34238,22125,16976],
rareitem => [34238,9180,2381],
rarestitem => [34238,65599,10017],
uberitem => [10037],
x => 456,
y => 623,
z => -24
},
# area 2
{
commonitem => [34238,22125,16976],
rareitem => [34238,9180,2381],
rarestitem => [34238,65599,10017],
uberitem => [10037],
x => 239,
y => 808,
z => 2
},
# area 3
{
commonitem => [34238,22125,16976],
rareitem => [34238,9180,2381],
rarestitem => [34238,65599,10017],
uberitem => [10037],
x => 85,
y => 781,
z => 3
},
# area 4
{
commonitem => [34238,22125,16976],
rareitem => [34238,9180,2381],
rarestitem => [34238,65599,10017],
uberitem => [10037],
x => 56,
y => 831,
z => 11
},
# area 5
{
commonitem => [34238,22125,16976],
rareitem => [34238,9180,2381],
rarestitem => [34238,65599,10017],
uberitem => [10037],
x => 1,
y => 854,
z => 7
},
# area 6
{
commonitem => [34238,22125,16976],
rareitem => [34238,9180,2381],
rarestitem => [34238,65599,10017],
uberitem => [10037],
x => -15,
y => 903,
z => 1
},
# area 7
{
commonitem => [34238,22125,16976],
rareitem => [34238,9180,2381],
rarestitem => [34238,65599,10017],
uberitem => [10037],
x => -518,
y => 1312,
z => 29
},
# area 8
{
commonitem => [34238,22125,16976],
rareitem => [34238,9180,2381],
rarestitem => [34238,65599,10017],
uberitem => [10037],
x => -795,
y => 1351,
z => 12
},
# area 9
{
commonitem => [34238,22125,16976],
rareitem => [34238,9180,2381],
rarestitem => [34238,65599,10017],
uberitem => [10037],
x => -651,
y => 865,
z => 15
},
# area 10
{
commonitem => [34238,22125,16976],
rareitem => [34238,9180,2381],
rarestitem => [34238,65599,10017],
uberitem => [10037],
x => -236,
y => 770,
z => 20
},
# area 11
{
commonitem => [34238,22125,16976,16976],
rareitem => [34238,9180,2381],
rarestitem => [34238,65599,10017,34238,34238],
uberitem => [10037],
x => -388,
y => 1038,
z => 17
},
# area 12
{
commonitem => [34238,22125,16976],
rareitem => [34238,9180,2381],
rarestitem => [34238,65599,10017],
uberitem => [10037],
x => -514,
y => 1311,
z => 31
},
# area 13
{
commonitem => [34238,22125,16976],
rareitem => [34238,9180,2381],
rarestitem => [34238,65599,10017],
uberitem => [10037],
x => -623,
y => 1523,
z => 19
},
# area 14
{
commonitem => [34238,22125,16976],
rareitem => [34238,9180,2381],
rarestitem => [34238,65599,10017],
uberitem => [10037],
x => -795,
y => 1348,
z => 11
},
# area 15
{
commonitem => [34238,22125,16976],
rareitem => [34238,9180,2381],
rarestitem => [34238,65599,10017],
uberitem => [10037],
x => -746,
y => 918,
z => 15
},
# area 16
{
commonitem => [34238,22125,16976],
rareitem => [34238,9180,2381],
rarestitem => [34238,65599,10017],
uberitem => [10037],
x => -388,
y => 1039,
z => 19
},
# other areas
],
# zone 24 - Erudnext
24 => [
# area 0
{
commonitem => [34238,54078,16976],
rareitem => [34238,65477,16903],
rarestitem => [88162,16847,34238],
uberitem => [10037],
x => 80,
y => -30,
z => 19
},
# area 1
{
commonitem => [34238,54078,16976],
rareitem => [34238,65477,16903],
rarestitem => [88162,16847,34238],
uberitem => [10037],
x => 17,
y => 302,
z => 47
},
# area 2
{
commonitem => [34238,54078,16976],
rareitem => [34238,65477,16903],
rarestitem => [88162,16847,34238],
uberitem => [10037],
x => 17,
y => 47,
z => 40
},
# area 3
{
commonitem => [34238,54078,16976],
rareitem => [34238,65477,16903],
rarestitem => [88162,16847,34238],
uberitem => [10037],
x => 158,
y => 17,
z => 39
},
# area 4
{
commonitem => [34238,54078,16976],
rareitem => [34238,65477,16903],
rarestitem => [88162,16847,34238],
uberitem => [10037],
x => -112,
y => 190,
z => 19
},
# area 5
{
commonitem => [34238,54078,16976],
rareitem => [34238,65477,16903],
rarestitem => [88162,16847,34238],
uberitem => [10037],
x => -337,
y => -896,
z => 70
},
# area 6
{
commonitem => [34238,54078,16976],
rareitem => [34238,65477,16903],
rarestitem => [88162,16847,34238],
uberitem => [10037],
x => -15,
y => -1183,
z => 90
},
# area 7
{
commonitem => [34238,54078,16976],
rareitem => [34238,65477,16903],
rarestitem => [88162,16847,34238],
uberitem => [10037],
x => -496,
y => -1213,
z => 92
},
# area 8
{
commonitem => [34238,54078,16976],
rareitem => [34238,65477,16903],
rarestitem => [88162,16847,34238],
uberitem => [10037],
x => -369,
y => -1205,
z => 52
},
# area 9
{
commonitem => [34238,54078,16976],
rareitem => [34238,65477,16903],
rarestitem => [88162,16847,34238],
uberitem => [10037],
x => -494,
y => -1136,
z => 53
},
# area 10
{
commonitem => [34238,54078,16976],
rareitem => [34238,65477,16903],
rarestitem => [88162,16847,34238],
uberitem => [10037],
x => -110,
y => -849,
z => 51
},
# area 11
{
commonitem => [34238,54078,16976],
rareitem => [34238,65477,16903],
rarestitem => [88162,16847,34238],
uberitem => [10037],
x => -33,
y => -1086,
z => 67
},
# area 12
{
commonitem => [34238,54078,16976],
rareitem => [34238,65477,16903],
rarestitem => [88162,16847,34238],
uberitem => [10037],
x => 61,
y => 142,
z => 13
},
# area 13
{
commonitem => [34238,54078,16976],
rareitem => [34238,65477,16903],
rarestitem => [88162,16847,34238],
uberitem => [10037],
x => -59,
y => -766,
z => 67
},
# area 14
{
commonitem => [34238,54078,16976],
rareitem => [34238,65477,16903],
rarestitem => [88162,16847,34238],
uberitem => [10037],
x => -398,
y => -911,
z => 67
},
# area 15
{
commonitem => [34238,54078,16976],
rareitem => [34238,65477,16903],
rarestitem => [88162,16847,34238],
uberitem => [10037],
x => -186,
y => -581,
z => 77
},
# other areas
],
224 => [
# area 0
{
commonitem => [13198,34238,54078,16976],
rareitem => [34238,65477,16903],
rarestitem => [88162,16847,34238],
uberitem => [10037],
x => -1061,
y => -181,
z => -41
},
# area 1
{
commonitem => [13198,34238,54078,16976],
rareitem => [34238,65477,16903],
rarestitem => [88162,16847,34238],
uberitem => [10037],
x => -1063,
y => -149,
z => -41
},
# area 2
{
commonitem => [13198,34238,54078,16976],
rareitem => [34238,65477,16903],
rarestitem => [88162,16847,34238],
uberitem => [10037],
x => -998,
y => -311,
z => 5
},
# area 3
{
commonitem => [13198,34238,54078,16976],
rareitem => [34238,65477,16903],
rarestitem => [88162,16847,34238],
uberitem => [10037],
x => -1032,
y => -440,
z => 22
},
# area 4
{
commonitem => [13198,34238,54078,16976],
rareitem => [34238,65477,16903],
rarestitem => [88162,16847,34238],
uberitem => [10037],
x => -1038,
y => -473,
z => 19
},
# area 5
{
commonitem => [13198,34238,54078,16976],
rareitem => [34238,65477,16903],
rarestitem => [88162,16847,34238],
uberitem => [10037],
x => -1106,
y => -540,
z => 25
},
# area 6
{
commonitem => [13198,34238,54078,16976],
rareitem => [34238,65477,16903],
rarestitem => [88162,16847,34238],
uberitem => [10037],
x => -1127,
y => -573,
z => 22
},
# area 7
{
commonitem => [13198,34238,54078,16976],
rareitem => [34238,65477,16903],
rarestitem => [88162,16847,34238],
uberitem => [10037],
x => -1128,
y => -800,
z => 27
},
# area 8
{
commonitem => [13198,34238,54078,16976],
rareitem => [34238,65477,16903],
rarestitem => [88162,16847,34238],
uberitem => [10037],
x => -1129,
y => -762,
z => 31
},
# area 9
{
commonitem => [13198,34238,54078,16976],
rareitem => [34238,65477,16903],
rarestitem => [88162,16847,34238],
uberitem => [10037],
x => -1128,
y => -978,
z => 31
},
# area 10
{
commonitem => [13198,34238,54078,16976],
rareitem => [34238,65477,16903],
rarestitem => [88162,16847,34238],
uberitem => [10037],
x => -1063,
y => -1039,
z => 19
},
# area 11
{
commonitem => [13198,34238,54078,16976],
rareitem => [34238,65477,16903],
rarestitem => [88162,16847,34238],
uberitem => [10037],
x => -1026,
y => -1123,
z => 28
},
# area 12
{
commonitem => [13198,34238,54078,16976],
rareitem => [34238,65477,16903],
rarestitem => [88162,16847,34238],
uberitem => [10037],
x => -997,
y => -1130,
z => 26
},
# area 13
{
commonitem => [13198,34238,54078,16976],
rareitem => [34238,65477,16903],
rarestitem => [88162,16847,34238],
uberitem => [10037],
x => -313,
y => -1102,
z => 19
},
# area 14
{
commonitem => [13198,34238,54078,16976],
rareitem => [34238,65477,16903],
rarestitem => [88162,16847,34238],
uberitem => [10037],
x => 1,
y => -1093,
z => 24
},
# area 15
{
commonitem => [13198,34238,54078,16976],
rareitem => [34238,65477,16903],
rarestitem => [88162,16847,34238],
uberitem => [10037],
x => 77,
y => -871,
z => 45
},
# area 16
{
commonitem => [13198,34238,54078,16976],
rareitem => [34238,65477,16903],
rarestitem => [88162,16847,34238],
uberitem => [10037],
x => 225,
y => -829,
z => 82
},
# area 17
{
commonitem => [13198,34238,54078,16976],
rareitem => [34238,65477,16903],
rarestitem => [88162,16847,34238],
uberitem => [10037],
x => 222,
y => -931,
z => 92
},
# area 18
{
commonitem => [13198,34238,54078,16976],
rareitem => [34238,65477,16903],
rarestitem => [88162,16847,34238],
uberitem => [10037],
x => 324,
y => -921,
z => 101
},
# area 19
{
commonitem => [13198,34238,54078,16976],
rareitem => [34238,65477,16903],
rarestitem => [88162,16847,34238],
uberitem => [10037],
x => 16,
y => -692,
z => 27
},
# area 20
{
commonitem => [13198,34238,54078,16976],
rareitem => [34238,65477,16903],
rarestitem => [88162,16847,34238],
uberitem => [10037],
x => 18,
y => -529,
z => 25
},
# area 21
{
commonitem => [13198,34238,54078,16976],
rareitem => [34238,65477,16903],
rarestitem => [88162,16847,34238],
uberitem => [10037],
x => -353,
y => -425,
z => 20
},
# area 22
{
commonitem => [13198,34238,54078,16976],
rareitem => [34238,65477,16903],
rarestitem => [88162,16847,34238],
uberitem => [10037],
x => -477,
y => -197,
z => -35
},
# area 23
{
commonitem => [13198,34238,54078,16976],
rareitem => [34238,65477,16903],
rarestitem => [88162,16847,34238],
uberitem => [10037],
x => -308,
y => -223,
z => -28
},
# other areas
],
# other zones
);
####################################################################################################
# END OF MINES EDITABLES
####################################################################################################
sub inMiningArea {
my $randomvalue = rand(99);
my $fallbackvalue = rand(9);
my $returnvalue;
$area = undef if defined($area);
return 0 if !exists($mine{$zoneid});
foreach my $i (keys(@{$mine{$zoneid}})) {
my $loc = $mine{$zoneid}[$i];
if( int($client->GetX()) ~~ [$loc->{x}-15..$loc->{x}+15] &&
int($client->GetY()) ~~ [$loc->{y}-15..$loc->{y}+15] &&
int($client->GetZ()) ~~ [$loc->{z}-25..$loc->{z}+25]) {
our $area = $i;
if ($randomvalue > -1 && $randomvalue < 58) {
my $sizearray = (scalar @{$loc->{commonitem}});
my $randselection = int(rand($sizearray));
$returnvalue = $loc->{commonitem}[$randselection];
}
elsif ($randomvalue > 57 && $randomvalue < 76) {
if ($fallbackvalue >= 6) {
my $sizearray = (scalar @{$loc->{commonitem}});
my $randselection = int(rand($sizearray));
$returnvalue = $loc->{commonitem}[$randselection];
} else {
$client->Message(9, "Clink, clank, clank.. Your miner's heart just sank!");
quest::summonitem(47838);
return 0;
}
}
elsif ($randomvalue > 75 && $randomvalue < 90) {
if ($fallbackvalue >= 5) {
my $sizearray = (scalar @{$loc->{rareitem}});
my $randselection = int(rand($sizearray));
$returnvalue = $loc->{rareitem}[$randselection];
} else {
my $sizearray = (scalar @{$loc->{commonitem}});
my $randselection = int(rand($sizearray));
$returnvalue = $loc->{commonitem}[$randselection];
}
}
elsif ($randomvalue > 89 && $randomvalue < 99 ) {
if ($fallbackvalue >= 5) {
my $sizearray = (scalar @{$loc->{rarestitem}});
my $randselection = int(rand($sizearray));
$returnvalue = $loc->{rarestitem}[$randselection];
} else {
my $sizearray = (scalar @{$loc->{rareitem}});
my $randselection = int(rand($sizearray));
$returnvalue = $loc->{rareitem}[$randselection];
}
}
elsif ($randomvalue == 99) {
if ($fallbackvalue >= 7) {
my $sizearray = (scalar @{$loc->{uberitem}});
my $randselection = int(rand($sizearray));
$returnvalue = $loc->{uberitem}[$randselection];
} else {
my $sizearray = (scalar @{$loc->{rarestitem}});
my $randselection = int(rand($sizearray));
$returnvalue = $loc->{rarestitem}[$randselection];
}
}
return $returnvalue;
}
$client->Message(12, "Your hands resonate, though this doesn't appear to be a mine!"); #Zone does have mines you just arent at one!
return 0;
}
}
sub isDepleted {
return 1 if !defined($area);
my $mine = "mine$area";
return 1 if ((defined($qglobals{$mine})) && ($qglobals{$mine} >= $mineattempts));
return 0;
}
sub doMining {
return if !defined($area);
my $mine = "mine$area";
if (!defined($qglobals{$mine})) {
quest::targlobal($mine, 1, "H1", 0, 0, $zoneid);
} else {
my $rm = 30 + int(rand(100));
my $rh = int(rand(1));
$rm = $rm + 60 if ($rh == 1);
quest::setglobal($mine, ++$qglobals{$mine}, 3, "M".$rm);
}
}
### EOF: /quests/global/items/script_8556.pl
I believe this was working without bugs, though I've untested this version in over a year.