################################################################### # # # kill and deliver quest # # # # author: kunrh # # version: 1.0 # # dScript version: 0.9.4-b1434 # # # # # # For this quest the player has to kill 2 different mobtypes at # # the first stage of the quest and then he has to deliver 2 # # different items at the second stage of the quest. # # # # While the player is at the step where he has to kill the mobs # # or deliver the items, he can always use the "/quest" command to # # see what exactly he has to do and how much he has already done. # # # # Usage # # # # Create a npc with "/npc create [npcname]" and assign him the # # quest with "/npc assignment --set killpigsandcows" # # # ################################################################### killpigsandcows: type: assignment debug: false actions: on assignment: - trigger name:chat toggle:true - trigger name:click toggle:true - lookclose state:true default constants: # At the first step the player has to kill 2 different mobtypes. # Here you can define which mobtypes he has to kill and how many. mobtype1: pig mobtype1amount: 10 mobtype2: cow mobtype2amount: 10 # At the second step the player has to deliver 2 different items. # I guess it makes the most sense when the player has to deliver # the items that the killed mobs drop. Here you can define which # items and how many. item1: pork item1amount: 64 item2: raw_beef item2amount: 64 # This quest is repeatable but it has a cooldown after finishing # it. You can change the cooldown time here. Use "1s" for 1 second, # "5m" for 5 minutes or "24h" for 24 hours. questredodelay: 20h # After completing the quest the player gets a money reward. You # can change the amount of money here. moneyreward: 10000 interact scripts: - 10 pigcowquest # There are no further comments because if you want to change something, which is highly # recommended and probably needed if your server isnt german, you should understand it anyways. pigcowquest: type: interact steps: "*meet": click trigger: script: - if <player.flag[pigcowquest]> != done { - random { - ^chat "Hallo <player.name>." - ^chat "Hi <player.name>." - ^chat "Moin <player.name>." } - wait 1 - random { - ^chat "Ich brauche noch einige Zutaten für das heutige Essen!" - ^chat "Einige Zutaten für das heutige Essen wurden noch nicht geliefert!" - ^chat "Uns wurde heute zu wenig Fleisch geliefert!" } - wait 1 - random { - ^chat "Kannst du mir helfen?" - ^chat "Hilfst du mir?" } - wait 1 - ^narrate "<&6>Schreibe <&a>Ja<&6> oder <&c>Nein<&6>!" - zap step:accept duration:20s } else { - random { - ^chat "Danke nochmal für das Fleisch!" - ^chat "Ohne dich wären bestimmt einige verhungert!" - ^chat "Wenn du mir nicht geholfen hättest, hätte es wahrscheinlich einen Aufstand gegeben!" } - wait 2 - random { - ^chat "Melde dich morgen nochmal, vielleicht brauche ich dann wieder welches!" - ^chat "Momentan haben wir genügend Fleisch. Schau morgen nochmal vorbei!" } } accept: chat trigger: "yes": trigger: "/Ja/, ich werde dir helfen." script: - wait 1 - ^narrate "<&5>Steak Tag <&6>- Quest gestartet" - wait 1 - random { - ^chat "Heute soll es ordentlich Fleisch geben!" - ^chat "Wir brauchen unbedingt Fleisch!" - ^chat "Wir haben zu wenig Schnitzel!" } - wait 1 - ^chat "Töte <cons:mobtype1amount> Schweine und <cons:mobtype2amount> Kühe und bringe mir dann <cons:item1amount> rohes Schweine- und <cons:item2amount> rohes Kuhfleisch!" - ^flag player mob1count:0 - ^flag player mob2count:0 - ^flag player "questaufgabe:->:<&5>[Steak Tag]<&f> Töte <player.flag[mob1count].as_int>/<cons:mobtype1amount> Schweine und <player.flag[mob2count].as_int>/<cons:mobtype2amount> Kühe!" - ^listen kill "id:Schwein Listener" type:entity name:<cons:mobtype1> qty:1 script:mob1check - ^listen kill "id:Kuh Listener" type:entity name:<cons:mobtype2> qty:1 script:mob2check - zap step:huntpigcow "no": trigger: "/Nein/, ich hab gerade keine Zeit." script: - wait 1 - random { - ^chat "Schade, dann werde ich mal jemand anderes fragen." - ^chat "Ok, hoffentlich hilft mir jemand anderes." } - wait 1 - random { - ^chat "Solltest du doch irgendwann Zeit haben, dann melde dich einfach nochmal bei mir!" - ^chat "Sprich mich einfach nochmal an, wenn du Zeit haben solltest." } - zap step:meet "everything else": trigger: /REGEX:\w+/ script: - wait 1 - random { - ^chat "Tut mir leid <player.name>, aber ich weiß nicht was <&sq><&f><context.message><&9><&sq> bedeutet!" - ^chat "Ich weiß nicht, was du mit <&sq><&f><context.message><&9><&sq> meinst!" } - wait 1 - ^narrate "<&6>Schreibe <&a>Ja<&6> oder <&c>Nein<&6>!" huntpigcow: click trigger: script: - ^chat "<player.name>, du hast erst <player.flag[mob1count].as_int>/<cons:mobtype1amount> Schweine und <player.flag[mob2count].as_int>/<cons:mobtype2amount> Kühe getötet!" - wait 1 - ^chat "Komm wieder, wenn du 10 Schweine und 10 Kühe getötet hast!" whiledelivering: click trigger: script: - ^if <player.item_in_hand.material> == m@<cons:item1> { - ^if <player.flag[item1delivered].as_int> < <cons:item1amount> { - ^define item_in_hand <player.item_in_hand.qty> - ^define toomuch <math.as_int:64-<player.flag[item1delivered]>> - ^flag player "questaufgabe:<-:<&5>[Steak Tag]<&f> Bringe der Küchenhilfe <player.flag[item1delivered].as_int>/<cons:item1amount> rohes Schweine- und <player.flag[item2delivered].as_int>/<cons:item2amount> rohes Kuhfleisch!" - ^flag player item1delivered:++:<player.item_in_hand.qty> - ^take i@<cons:item1> qty:<player.item_in_hand.qty> - ^if <player.flag[item1delivered].as_int> < <cons:item1amount> { - ^chat "Danke für %item_in_hand% rohes Schweinefleisch!" - ^flag player "questaufgabe:->:<&5>[Steak Tag]<&f> Bringe der Küchenhilfe <player.flag[item1delivered].as_int>/<cons:item1amount> rohes Schweine- und <player.flag[item2delivered].as_int>/<cons:item2amount> rohes Kuhfleisch!" } else { - ^chat "Danke für %toomuch% rohes Schweinefleisch!" - ^flag player item1:done - ^if <player.flag[item1delivered].as_int> > <cons:item1amount> { - ^give i@<cons:item1> qty:<math.as_int:<player.flag[item1delivered]>-<cons:item1amount>> } - ^flag player item1delivered:<cons:item1amount> - ^flag player "questaufgabe:->:<&5>[Steak Tag]<&f> Bringe der Küchenhilfe <player.flag[item1delivered].as_int>/<cons:item1amount> rohes Schweine- und <player.flag[item2delivered].as_int>/<cons:item2amount> rohes Kuhfleisch!" - ^if <player.flag[item1]> == done && <player.flag[item2]> == done { - random { - ^chat "Danke für deine Hilfe. Hier hast du deine Belohnung!" - ^chat "Vielen Dank! Über <cons:moneyreward> Dollar freust du dich bestimmt!" } - ^give money qty:<cons:moneyreward> - ^narrate "<&2>[<&f>Money<&2>] Received <&f><cons:moneyreward> Dollars <&2>from <&f><npc.name>" - wait 1 - ^narrate "<&5>Steak Tag <&6>- Quest abgeschlossen" - ^flag player pigcowquest:done duration:<cons:questredodelay> - ^flag player "questaufgabe:<-:<&5>[Steak Tag]<&f> Bringe der Küchenhilfe <player.flag[item1delivered].as_int>/<cons:item1amount> rohes Schweine- und <player.flag[item2delivered].as_int>/<cons:item2amount> rohes Kuhfleisch!" - ^flag player item1delivered:! - ^flag player item2delivered:! - ^flag player item1:! - ^flag player item2:! - zap script:pigcowquest step:meet } else { - ^chat "Du musst noch etwas rohes Kuhfleisch zu mir bringen!" } } } else { - ^chat "Du hast bereits genügend rohes Schweinefleisch abgeliefert!" } } else if <player.item_in_hand.material> == m@<cons:item2> { - ^if <player.flag[item2delivered].as_int> < <cons:item2amount> { - ^define item_in_hand <player.item_in_hand.qty> - ^define toomuch <math.as_int:64-<player.flag[item2delivered]>> - ^flag player "questaufgabe:<-:<&5>[Steak Tag]<&f> Bringe der Küchenhilfe <player.flag[item1delivered].as_int>/<cons:item1amount> rohes Schweine- und <player.flag[item2delivered].as_int>/<cons:item2amount> rohes Kuhfleisch!" - ^flag player item2delivered:++:<player.item_in_hand.qty> - ^take i@<cons:item2> qty:<player.item_in_hand.qty> - ^if <player.flag[item2delivered].as_int> < <cons:item2amount> { - ^chat "Danke für %item_in_hand% rohes Kuhfleisch!" - ^flag player "questaufgabe:->:<&5>[Steak Tag]<&f> Bringe der Küchenhilfe <player.flag[item1delivered].as_int>/<cons:item1amount> rohes Schweine- und <player.flag[item2delivered].as_int>/<cons:item2amount> rohes Kuhfleisch!" } else { - ^chat "Danke für %toomuch% rohes Kuhfleisch!" - ^flag player item2:done - ^if <player.flag[item2delivered].as_int> > <cons:item2amount> { - ^give i@<cons:item2> qty:<math.as_int:<player.flag[item2delivered]>-<cons:item2amount>> } - ^flag player item2delivered:<cons:item2amount> - ^flag player "questaufgabe:->:<&5>[Steak Tag]<&f> Bringe der Küchenhilfe <player.flag[item1delivered].as_int>/<cons:item1amount> rohes Schweine- und <player.flag[item2delivered].as_int>/<cons:item2amount> rohes Kuhfleisch!" - ^if <player.flag[item1]> == done && <player.flag[item2]> == done { - random { - ^chat "Danke für deine Hilfe. Hier hast du deine Belohnung!" - ^chat "Vielen Dank! Über <cons:moneyreward> Dollar freust du dich bestimmt!" } - ^give money qty:<cons:moneyreward> - ^narrate "<&2>[<&f>Money<&2>] Received <&f><cons:moneyreward> Dollars <&2>from <&f><npc.name>" - wait 1 - ^narrate "<&5>Steak Tag <&6>- Quest abgeschlossen" - ^flag player pigcowquest:done duration:<cons:questredodelay> - ^flag player "questaufgabe:<-:<&5>[Steak Tag]<&f> Bringe der Küchenhilfe <player.flag[item1delivered].as_int>/<cons:item1amount> rohes Schweine- und <player.flag[item2delivered].as_int>/<cons:item2amount> rohes Kuhfleisch!" - ^flag player item1delivered:! - ^flag player item2delivered:! - ^flag player item1:! - ^flag player item2:! - zap script:pigcowquest step:meet } else { - ^chat "Du musst noch etwas rohes Schweinefleisch zu mir bringen!" } } } else { - ^chat "Du hast bereits genügend rohes Kuhfleisch abgeliefert!" } } else { - random { - ^chat "Ich brauche noch das Fleisch! Du kannst auch einzelne Portionen bringen!" - ^chat "Wo bleibt das Fleisch? Du musst nicht alles auf einmal bringen!" } - wait 1 - ^chat "Du hast erst <player.flag[item1delivered].as_int>/<cons:item1amount> rohes Schweinefleisch und <player.flag[item2delivered].as_int>/<cons:item2amount> rohes Kuhfleisch zur mir gebracht!" } mob1check: type: task script: - ^flag player "questaufgabe:<-:<&5>[Steak Tag]<&f> Töte <player.flag[mob1count].as_int>/<cons:mobtype1amount> Schweine und <player.flag[mob2count].as_int>/<cons:mobtype2amount> Kühe!" - ^flag player mob1count:++ - ^flag player "questaufgabe:->:<&5>[Steak Tag]<&f> Töte <player.flag[mob1count].as_int>/<cons:mobtype1amount> Schweine und <player.flag[mob2count].as_int>/<cons:mobtype2amount> Kühe!" - ^narrate "<&5>[QUEST]<&f><&co> Du hast <player.flag[mob1count].as_int>/<cons:mobtype1amount> Schweine getötet!" - ^if <player.flag[mob1count].as_int> >= <cons:mobtype1amount> { - flag player mob1:done - if <player.flag[mob1]> == done && <player.flag[mob2]> == done { - narrate "<&5>[QUEST]<&f><&co> Du hast <cons:mobtype1amount> Schweine und <cons:mobtype2amount> Kühe getötet. Bringe der Küchenhilfe <cons:item1amount> rohes Schweine- und <cons:item2amount> rohes Kuhfleisch!" - ^flag player "questaufgabe:<-:<&5>[Steak Tag]<&f> Töte <player.flag[mob1count].as_int>/<cons:mobtype1amount> Schweine und <player.flag[mob2count].as_int>/<cons:mobtype2amount> Kühe!" - ^flag player mob1count:! - ^flag player mob2count:! - ^flag player mob1:! - ^flag player mob2:! - ^flag player item1delivered:0 - ^flag player item2delivered:0 - ^flag player "questaufgabe:->:<&5>[Steak Tag]<&f> Bringe der Küchenhilfe <player.flag[item1delivered].as_int>/<cons:item1amount> rohes Schweine- und <player.flag[item2delivered].as_int>/<cons:item2amount> rohes Kuhfleisch!" - zap script:pigcowquest step:whiledelivering } else { - narrate "<&5>[QUEST]<&f><&co> Du musst noch ein paar Kühe töten!" } } else { - ^listen kill "id:Schwein Listener" type:entity name:<cons:mobtype1> qty:1 script:mob1check } mob2check: type: task script: - ^flag player "questaufgabe:<-:<&5>[Steak Tag]<&f> Töte <player.flag[mob1count].as_int>/<cons:mobtype1amount> Schweine und <player.flag[mob2count].as_int>/<cons:mobtype2amount> Kühe!" - ^flag player mob2count:++ - ^flag player "questaufgabe:->:<&5>[Steak Tag]<&f> Töte <player.flag[mob1count].as_int>/<cons:mobtype1amount> Schweine und <player.flag[mob2count].as_int>/<cons:mobtype2amount> Kühe!" - ^narrate "<&5>[QUEST]<&f><&co> Du hast <player.flag[mob2count].as_int>/<cons:mobtype2amount> Kühe getötet!" - ^if <player.flag[mob2count].as_int> >= <cons:mobtype2amount> { - flag player mob2:done - if <player.flag[mob1]> == done && <player.flag[mob2]> == done { - narrate "<&5>[QUEST]<&f><&co> Du hast <cons:mobtype1amount> Schweine und <cons:mobtype2amount> Kühe getötet. Bring der Küchenhilfe <cons:item1amount> rohes Schweine- und <cons:item2amount> rohes Kuhfleisch!" - ^flag player "questaufgabe:<-:<&5>[Steak Tag]<&f> Töte <player.flag[mob1count].as_int>/<cons:mobtype1amount> Schweine und <player.flag[mob2count].as_int>/<cons:mobtype2amount> Kühe!" - ^flag player mob1count:! - ^flag player mob2count:! - ^flag player mob1:! - ^flag player mob2:! - ^flag player item1delivered:0 - ^flag player item2delivered:0 - ^flag player "questaufgabe:->:<&5>[Steak Tag]<&f> Bringe der Küchenhilfe <player.flag[item1delivered].as_int>/<cons:item1amount> rohes Schweine- und <player.flag[item2delivered].as_int>/<cons:item2amount> rohes Kuhfleisch!" - zap script:pigcowquest step:whiledelivering } else { - narrate "<&5>[QUEST]<&f><&co> Du musst noch ein paar Schweine töten!" } } else { - ^listen kill "id:Kuh Listener" type:entity name:<cons:mobtype2> qty:1 script:mob2check } quests: type: world events: on quest command: - if <player.has_flag[questaufgabe]> { - foreach <player.flag[questaufgabe].as_list> { - narrate "%value%" } } else { - narrate "Du hast momentan keine Quest!" } - determine fulfilled
Very nice job!