summaryrefslogtreecommitdiff
path: root/npc
diff options
context:
space:
mode:
Diffstat (limited to 'npc')
-rw-r--r--npc/020-7-1/core.txt64
1 files changed, 46 insertions, 18 deletions
diff --git a/npc/020-7-1/core.txt b/npc/020-7-1/core.txt
index 02ed4e812..015b23ffa 100644
--- a/npc/020-7-1/core.txt
+++ b/npc/020-7-1/core.txt
@@ -188,21 +188,23 @@ function script BSProccess {
if (getd("$@BS_NEST"+str(.@id)))
return;
- // Let's see if something should happen
+ // Let's see if something should happen (16.7% odds each second. 3% of drip)
.@chance=rand(30);
- if (.@chance <= 16) {
+ if (.@chance <= 25) {
return;
} else if (.@chance == 27) {
dispbottom l("A slime drips in front of you and explodes!");
percentheal -40, 0;
+ } else {
+ dispbottom l("You notice a group of slimes emerging from the debris among the shelves.");
}
// If it haven't returned yet: It's good to go!
// Reserve the nest ID for us, and clear the previous.
BSClearNest(@nestid);
+ BSClearNest(.@nest);
@nestid=.@nest;
- BSClearNest(@nestid);
- setd(getd("$@BS_NEST"+.@id), getcharid(0));
+ setd("$@BS_NEST"+.@id, getcharid(0));
// We spawn monsters
if (.@id % 4 == 0)
@@ -210,10 +212,9 @@ function script BSProccess {
else
.@mid=BlueSlime;
- // Does getd() works against a constant?
- areamonster .@m$, .@xc-2, .@yc-2, .@xc+2, .@yc+2, "", .@mid, getd("BS_KNEST"+.@id), "#BlueSageHUB::OnSlimeKill"+.@id;
-
- dispbottom l("You notice a group of slimes emerging from the debris among the shelves.");
+ //debugmes "Spawning %d slimes on quadrand %d", getd("$@BS_KNEST"+.@id), .@id;
+ // Does getd() works against a constant? I don't think so
+ monster .@m$, .@xc, .@yc, strcharinfo(0)+"'s slime", .@mid, getd("$@BS_KNEST"+.@id), "#BlueSageHUB::OnSlimeKill"+.@id;
return;
}
@@ -225,14 +226,25 @@ function script BSProccessDeath {
.@ammo=getarg(1);
.@id=BSQuadrand(.@nest);
+ // First and foremost: Drops
+ if (playerattached()) {
+ getmapxy(.@m$, .@x, .@y, 0);
+ // Capped at ~12% drop chance of book pages
+ if (rand(0,10000) <= 560+(readparam(bLuck)*7))
+ makeitem SpellBookPage, 1, .@m$, .@x, .@y;
+ if (rand(0,10000) <= 100)
+ makeitem Candy, 1, .@m$, .@x, .@y;
+ }
+
+ // Mark the score if appliable and player is attached
if (playerattached()) {
- // Mark the score if appliable
if (@nestid == .@nest) {
.@q2=getq2(NivalisQuest_BlueSageSlimes)+1;
setq2 NivalisQuest_BlueSageSlimes, .@q2;
}
}
+ // All mobs are dead
if (!mobcount("020-7-1", "#BlueSageHUB::OnSlimeKill"+.@id)) {
if (playerattached()) {
// Did you killed all slimes? Or did they explode themselves?
@@ -242,8 +254,12 @@ function script BSProccessDeath {
.@q3=getq3(NivalisQuest_BlueSageSlimes);
setq3 NivalisQuest_BlueSageSlimes, .@q3 | .@nest;
dispbottom l("It wasn't easy, but you think that you extinguished this nest.");
+ if ((.@q3 | .@nest) == BS_SNESTALL)
+ dispbottom l("Perhaps that was the last of them?");
} else {
dispbottom l("You don't see any slimes from that nest anymore. But did you really get all of them?");
+ debugmes "Nest %d, killed %d/%d slimes", .@id, .@q2, .@ammo;
+ debugmes "NEST ID: %d / %d", @nestid, .@nest;
}
}
// Regardless of player attached or not, this nest must be clean
@@ -257,39 +273,39 @@ function script BSProccessDeath {
end;
OnSlimeKill1:
- BSProccessDeath(BS_SNEST1, BS_KNEST1);
+ BSProccessDeath(BS_SNEST1, $@BS_KNEST1);
end;
OnSlimeKill2:
- BSProccessDeath(BS_SNEST2, BS_KNEST2);
+ BSProccessDeath(BS_SNEST2, $@BS_KNEST2);
end;
OnSlimeKill3:
- BSProccessDeath(BS_SNEST3, BS_KNEST3);
+ BSProccessDeath(BS_SNEST3, $@BS_KNEST3);
end;
OnSlimeKill4:
- BSProccessDeath(BS_SNEST4, BS_KNEST4);
+ BSProccessDeath(BS_SNEST4, $@BS_KNEST4);
end;
OnSlimeKill5:
- BSProccessDeath(BS_SNEST5, BS_KNEST5);
+ BSProccessDeath(BS_SNEST5, $@BS_KNEST5);
end;
OnSlimeKill6:
- BSProccessDeath(BS_SNEST6, BS_KNEST6);
+ BSProccessDeath(BS_SNEST6, $@BS_KNEST6);
end;
OnSlimeKill7:
- BSProccessDeath(BS_SNEST7, BS_KNEST7);
+ BSProccessDeath(BS_SNEST7, $@BS_KNEST7);
end;
OnSlimeKill8:
- BSProccessDeath(BS_SNEST8, BS_KNEST8);
+ BSProccessDeath(BS_SNEST8, $@BS_KNEST8);
end;
OnSlimeKill9:
- BSProccessDeath(BS_SNEST9, BS_KNEST9);
+ BSProccessDeath(BS_SNEST9, $@BS_KNEST9);
end;
OnTouch:
@@ -301,5 +317,17 @@ OnCycle:
addtimer(1000, "#BlueSageHUB::OnCycle");
end;
+OnInit:
+ // K - Nest Kills
+ $@BS_KNEST1=3;
+ $@BS_KNEST2=2;
+ $@BS_KNEST3=1;
+ $@BS_KNEST4=4; // WS
+ $@BS_KNEST5=2;
+ $@BS_KNEST6=1;
+ $@BS_KNEST7=3;
+ $@BS_KNEST8=5; // WS
+ $@BS_KNEST9=1;
+ end;
}