Kick it off with a mob greet to see if they want to play or are on the quest.
Code:
Name: 'Questmaster Greet - 3', VNum: [ 138], RNum: [ 138]
Trigger Intended Assignment: Mobiles
Trigger Type: Greet , Numeric Arg: 100, Arg list: None
Commands:
* By Rumble of The Builder Academy builderacademy.net 9091
* Part of a timed quest to kill a mob or find an object. Trigs 138-144.
* A simple automated quest so only let players earn up to 50 questpoints.
if %actor.is_pc% && %actor.questpoints% < 50
wait 2 sec
* Check to see if they are not on a zone 1 quest.
if !%actor.varexists(on_quest_zone_1)%
say Welcome %actor.name%, are you interested in a simple quest?
else
*get the values from the player variable
extract day 1 %actor.on_quest_zone_1%
extract hour 2 %actor.on_quest_zone_1%
* Set this value to the number of mud hours in a mud day
set HOURS_IN_DAY 24
* Compare the values to the current time
* (Your hours per day and days per year vary on each mud.)
* (You may also want to check for 'time.year')
eval current_ticks (%time.day%/%HOURS_IN_DAY%)+%time.hour%
eval start_ticks (%day%/%HOURS_IN_DAY%)+%hour%
*find out the time difference in ticks
eval ticks_passed %current_ticks%-%start_ticks%
*check if 10 ticks (~10 mins) have passed
if %ticks_passed% > 10
rdelete on_quest_zone_1 %actor.id%
say Welcome %actor.name%, are you interested in a simple quest?
else
say How is your quest going %actor.name%, do you have a quest token or the quest mobs head for me?
end
end
end
Assign the quest:
Code:
Name: 'Questmaster Quest Assignment - 3', VNum: [ 139], RNum: [ 139]
Trigger Intended Assignment: Mobiles
Trigger Type: Speech , Numeric Arg: 1, Arg list: *
Commands:
* By Rumble of The Builder Academy builderacademy.net 9091
* Part of a timed quest to kill a mob or find an object. Trigs 138-144.
if %actor.varexists(on_quest_zone_1)%
*get the values from the player variable
extract day 1 %actor.on_quest_zone_1%
extract hour 2 %actor.on_quest_zone_1%
* Set this value to the number of mud hours in a mud day
set HOURS_IN_DAY 24
* Compare the values to the current time
* (Your hours per day and days per year vary on each mud.)
* (You may also want to check for 'time.year')
eval current_ticks (%time.day%/%HOURS_IN_DAY%)+%time.hour%
eval start_ticks (%day%/%HOURS_IN_DAY%)+%hour%
*find out the time difference in ticks
eval ticks_passed %current_ticks%-%start_ticks%
*check if 10 ticks (~10 mins) have passed
if %ticks_passed% > 10
rdelete on_quest_zone_1 %actor.id%
else
halt
end
end
if %actor.questpoints% > 50
halt
end
* This loop goes through the entire string of words the actor says. .car is the
* word and .cdr is the remaining string.
eval word %speech.car%
eval rest %speech.cdr%
while %word%
* Check to see if the word is yes or an abbreviation of yes.
if yes /= %word%
say Very well %actor.name%. Would you like to find an object or hunt a mobile?
halt
end
* Pick a room from 100 to 365.
eval loadroom 99 + %random.265%
if mobile /= %word% || hunt /= %word%
* Load the mob in the random room picked above.
%at% %loadroom% %load% m 15
say Go kill the quest mob and bring me its head %actor.name%. You only have 10 minutes!
* Load an object on the player that counts down from 10 minutes.
%load% obj 16 %actor% inv
%send% %actor% %self.name% gives you the quest timer.
%echoaround% %actor% %self.name% gives %actor.name% the quest timer.
set on_quest_zone_1 %time.day% %time.hour%
remote on_quest_zone_1 %actor.id%
halt
elseif object /= %word% || find /= %word%
say Go find the quest token and return it to me. You only have 10 minutes %actor.name%!
%load% o 15
%at% %loadroom% drop quest_token_zone_1
%load% obj 16 %actor% inv
%send% %actor% %self.name% gives you the quest timer.
%echoaround% %actor% %self.name% gives %actor.name% the quest timer.
set on_quest_zone_1 %time.day% %time.hour%
remote on_quest_zone_1 %actor.id%
halt
end
* End of the loop we need to take the next word in the string and save the
* remainder for the next pass.
eval word %rest.car%
eval rest %rest.cdr%
done
Now to limit how long they have, give them a timer they can look at to see how much time they have and warn them when they are almost out of time. If they run out of time take them off the quest. (making this quest timed doubled the triggers and complexity. But, I think quests shouldn't be easy. That is also why you can only earn 50 qp's using this automated quest system. My quest shop items start at 100 qp's so players HAVE to do imm created quests to earn enough for something valuable:
Code:
Name: 'Quest Timer - 16', VNum: [ 140], RNum: [ 140]
Trigger Intended Assignment: Objects
Trigger Type: Command , Numeric Arg: 7, Arg list: l
Commands:
* By Rumble of The Builder Academy tbamud.com 9091
* Part of a timed quest to kill a mob or find an object. Trigs 138-144.
* Let a player see how much time they have left.
if %cmd.mudcommand% == look && timer /= %arg%
%send% %actor% You have %self.timer% minutes remaining.
* Let the look timer command still go through so they look at it.
return 0
else
return 0
end
Purge the quest timer after 10 minutes and remove the quest variable.
Code:
Name: 'Quest 10 min Purge - 15, 16, 17', VNum: [ 141], RNum: [ 141]
Trigger Intended Assignment: Objects
Trigger Type: Timer , Numeric Arg: 100, Arg list: None
Commands:
* By Rumble of The Builder Academy tbamud.com 9091
* Part of a timed quest to kill a mob or find an object. Trigs 138-144.
* Attached to quest objects 15-17. Purges itself 10 minutes after loading if
* player does not finish the quest.
* Make sure timer is being carried by a player.
if %self.carried_by%
set actor %self.carried_by%
if %actor.is_pc%
%send% %actor% Your quest time has run out. Try again.
* Delete the on quest variable so they can try again.
rdelete on_quest_zone_1 %actor.id%
end
end
* Purge the timer.
%purge% %self%
Have the quest timer countdown for them every minute or so.
Code:
Name: 'Quest Timer Random - 16', VNum: [ 142], RNum: [ 142]
Trigger Intended Assignment: Objects
Trigger Type: Random , Numeric Arg: 10, Arg list: None
Commands:
* By Rumble of The Builder Academy tbamud.com 9091
* Part of a timed quest to kill a mob or find an object. Trigs 138-144.
* If timer is being carried by a player, warn them every 2 minutes.
if %self.carried_by%
set actor %self.carried_by%
if %actor.is_pc%
%send% %actor% You have %self.timer% minutes remaining.
end
end
Start the timer on the mob head too.
Code:
Name: 'Quest Mob Loads Head - 15', VNum: [ 144], RNum: [ 144]
Trigger Intended Assignment: Mobiles
Trigger Type: Load , Numeric Arg: 100, Arg list: None
Commands:
* By Rumble of The Builder Academy tbamud.com 9091
* Part of a timed quest to kill a mob or find an object. Trigs 138-144.
* This is a load instead of a death trig because I want the head to purge 10
* minutes after loading.
%load% obj 17
Return to the questmaster to receive your reward:
Code:
Name: 'Questmaster Receive - 3', VNum: [ 143], RNum: [ 143]
Trigger Intended Assignment: Mobiles
Trigger Type: Receive , Numeric Arg: 100, Arg list: None
Commands:
* By Rumble of The Builder Academy tbamud.com 9091
* Part of a timed quest to kill a mob or find an object. Trigs 138-144.
* Check if they are on the quest.
if !%actor.varexists(on_quest_zone_1)%
say You are not even on a quest %actor.name%.
* Stop the trig and prevent the item from being given to the mob.
halt
end
*
wait 1 sec
* If they had the head or the token.
if %object.vnum% == 15 || %object.vnum% == 17
rdelete on_quest_zone_1 %actor.id%
say Well done, %actor.name%.
* Give them 50 gold and experience. Delete the on quest variable and purge.
nop %actor.exp(50)%
nop %actor.gold(50)%
%purge% %object%
* Reward them with 1 questpoint. Cheap I know but these quests are not hard.
nop %actor.questpoints(1)%
say you have earned 50 gold, 50 xp, 1 questpoint %actor.name%.
else
say I don't want that!
* Don't accept the object to prevent overloading the mob with junk.
return 0.
end
If this was helpful please
vote
or leave a
review
for TBA.