diff options
Diffstat (limited to 'world/map/npc/029-2/barrels_config.txt')
-rw-r--r-- | world/map/npc/029-2/barrels_config.txt | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/world/map/npc/029-2/barrels_config.txt b/world/map/npc/029-2/barrels_config.txt new file mode 100644 index 00000000..5407a944 --- /dev/null +++ b/world/map/npc/029-2/barrels_config.txt @@ -0,0 +1,105 @@ +// Barrels +// Author: Wushin +029-2.gat,33,88,24,7|monster|HouseMaggot|1050,2,100000ms,30000ms,Barrel#0::OnMaggotDeath +-|script|#BarrelConfig|-1 +{ + end; + +OnInit: + setarray $@BarrelBits, (1 << 20), (1 << 21), (1 << 22), (1 << 23), (1 << 24), (1 << 25), (1 << 26), (1 << 27); + setarray $@BarrelRewards, 533, 507, 505, 518, 537, 526; + set $@BarrelSpawnCnt, 1; + set $@BarrelSpawnId, 1050; + set $@BarrelSpawnName$, "House Maggot"; + set $@BarrelMax, getarraysize($@BarrelBits); + end; +} +function|script|SetBarrelMask +{ + set STARTAREA, (STARTAREA & ~(NIBBLE_4_MASK) | (@barrel_tmp << NIBBLE_4_SHIFT)); + set @barrel_tmp, 0; + return; +} +function|script|CheckBarrelQuest +{ + callfunc "CountBarrels"; + set @barrel_quest, ((STARTAREA & NIBBLE_4_MASK) >> NIBBLE_4_SHIFT); + return; +} +function|script|CountBarrels +{ + set @barrel_count, 0; + set @count_tmp, 0; + goto L_Loop; + +L_Loop: + if (STARTAREA & $@BarrelBits[@barrel_count]) + goto L_AddOne; + goto L_LoopAgain; + +L_AddOne: + set @barrel_count, (@barrel_count + 1); + goto L_LoopAgain; + +L_LoopAgain: + set @count_tmp, (@count_tmp + 1); + if (@count_tmp == getarraysize($@BarrelBits)) + goto L_BarrelTally; + goto L_Loop; + +L_BarrelTally: + return; +} +function|script|CheckBarrel +{ + callfunc "PCtoNPCRange"; + if (@npc_check) + goto L_Range; + callfunc "CheckBarrelQuest"; + if (!(@barrel_quest == 2)) + goto L_NoI; + if (STARTAREA & $@BarrelBits[@barrel]) + goto L_Empty; + set STARTAREA, STARTAREA | $@BarrelBits[@barrel]; + + callfunc "CountBarrels"; + if (@barrel_count == $@BarrelMax) + goto L_QuestReward; + set @player_random, rand(@barrel_count * 10); + set @barrel_random, rand(@barrel_count * $@BarrelMax); + if (@barrel_random > @player_random) + goto L_Spawn; + goto L_Reward; + +L_Range: + message strcharinfo(0), "You'll need to get closer."; + goto L_Return; + +L_NoI: + message strcharinfo(0), "Nothing interesting here."; + goto L_Return; + +L_Empty: + message strcharinfo(0), "You've already searched this barrel."; + goto L_Return; + +L_QuestReward: + message strcharinfo(0), "You found the bug bomb."; + misceffect 33; + set @barrel_tmp, 3; + callfunc "SetBarrelMask"; + killmonster getmap() + ".gat", "Barrel#0::OnMaggotDeath"; + goto L_Return; + +L_Spawn: + message strcharinfo(0), "Uck, More Maggots!"; + areamonster getmap() + ".gat", @npc_loc[0], @npc_loc[1], (@npc_loc[0] + 1), (@npc_loc[1] + 1), $@BarrelSpawnName$, $@BarrelSpawnId, $@BarrelSpawnCnt, "Barrel#0::OnMaggotDeath"; + goto L_Return; + +L_Reward: + getitem $@BarrelRewards[rand(getarraysize($@BarrelRewards))], 1; + goto L_Return; + +L_Return: + return; +} |