Go Back   EQEmulator Home > EQEmulator Forums > Quests > Quests::Q&A

Quests::Q&A This is the quest support section

Reply
 
Thread Tools Display Modes
  #1  
Old 01-09-2010, 07:39 PM
everlastnmn
Sarnak
 
Join Date: Apr 2009
Location: minnesota
Posts: 45
Default Anyone have a script for Spell scriber bot ?

Would prefer one that scribes all spells, but will take any if someone has thanks
Reply With Quote
  #2  
Old 01-09-2010, 08:10 PM
Lillu
Hill Giant
 
Join Date: Sep 2008
Posts: 204
Default

http://www.eqemulator.net/forums/sho...=spell+scriber

a lot more out there. do a search on the forum.
__________________
Reply With Quote
  #3  
Old 01-10-2010, 09:33 PM
neiv2
Hill Giant
 
Join Date: Mar 2009
Location: CO
Posts: 183
Default

This is the spell-scriber script from AX:

Code:
############################################
# ZONE: All Starter Zones, PoK and Bazaar
# DATABASE: AX_CLASSIC Custom
# By Angelox
#
#
 sub EVENT_SAY {
  if ($text=~/hail/i){
    quest::say("Hello $name! I can scribe certain [spells] your bots may require ");}
  elsif ($text=~/spells/i){
   quest::say("I can scribe [Circle] or [Portal] spells, Also [Temperance], [Lesser Summon Corpse], [Summon Corpse], [Conjure Corpse] - But you need to bring me the spell");}
  elsif ($text=~/lesser summon corpse/i){
   quest::say("Buy it from the spell merchant, it and hand it to me. I'll scribe the spell for your bot.");}
  elsif ($text=~/summon corpse/i){
   quest::say("That is a dropped spell, you can find it on The Ishva Mal, who resides in South Karana's caves of the Infected Paw ");}
  elsif ($text=~/conjure corpse/i){
   quest::say("That is a dropped spell, you can find it on a cliff golem, a mature wurm, or most mobs in Sebilis ");}
  elsif (($text=~/circle/i)&&($ulevel>=50)){
   quest::say("I have the ability to scribe all of your druids' Circle spells, but I see you are too high a level level for Norrath Adventurers' quests.");
   quest::say("I can still scribe your needed spells, if you bring me what I [need].");}
  elsif (($text=~/portal/i)&&($ulevel>=50)){
   quest::say("I have the ability to scribe all of your Wizards' Portal spells, but I see you are too high a level level for Norrath Adventurers' quests.");
   quest::say("I can still scribe your needed spells, if you bring me what I [need].");}
  elsif (($text=~/need/i)&&($ulevel>=50)){
   quest::say("If you can bring me the required spells, I will scribe the spells for [Druid] or [Wizard]");}
  elsif (($text=~/Druid/i)&&($ulevel>=50)){
   quest::say("For your Druids circle spells, I require four spells; Circle of The Great Divide, Circle of Wakening Lands, Circle of Cobalt Scar, and Circle of Bloodfields.");
   quest::say("Bring me the Spells, and I will finish scribing your gate spells");}
  elsif (($text=~/Wizard/i)&&($ulevel>=50)){
   quest::say("For your Wizards' Portal spells, I require four spells; Wakening Lands Portal, Great Divide Portal, Cobalt Scar Portal, and Bloodfields Portal.");
   quest::say("Bring me the Spells, and I will finish scribing your gate spells");}
  elsif ($text=~/circle/i){
   quest::say("I have the ability to scribe all of your druids' merchant-bought Circle spells, but I need [proof] that you are worthy, and have traveled Norrath without the need of portals.");
   quest::say("Go and see the Norrath Adventurer, his quests will provide [proof] of your worthiness.");}
  elsif ($text=~/portal/i){
   quest::say("I have the ability to scribe all of your wizards' merchant-bought Portal spells, but I need [proof] that you are worthy, and have traveled Norrath without the need of portals. Go and see the Norrath Adventurer, his quests will provide proof of your worthiness.");
   quest::say("Go and see the Norrath Adventurer, his quests will provide [proof] of your worthiness.");}
  elsif ($text=~/proof/i){
   quest::say("The Norrath Adventurer has three quests for you, completition of a quest will reward you two moonstones- one for your Druid's Circle spells and one for your Wizard's Portal spells.");
   quest::say("Bring me the Moonstones, and I will scribe a portion of the gate spells");
   quest::say("Complete all three quests, and you will have all possible gate spells scribed.");}
  elsif ($text=~/temperance/i){
   quest::say("Go to the Gulf of [Gunthak], and see an Erudite Palladin named Millius Darkwater. He's near the Lighthouse with the merchants. ");}
  elsif ($text=~/gunthak/i){
   quest::say("Entrance to Gulf of Gunthak is in an old ship docked on the east coast of Stonbrunt Mountains.");}
}

sub EVENT_ITEM{
## Summon Corpse 
 if (($itemcount{28216} == 1) && ($bot_spell_1 == 1) | ($bot_spell_1 == 2) | ($bot_spell_1 == 3)){ 
    quest::say("Those spells are already scribed.");
    quest::summonitem(28216);}
  elsif (($itemcount{15003} == 1) && ($bot_spell_1 == 2) | ($bot_spell_1 == 3)){ 
    quest::say("Those spells are already scribed.");
    quest::summonitem(15003);}
  elsif (($itemcount{19307} == 1) && ($bot_spell_1 == 3)){ 
    quest::say("Those spells are already scribed.");
    quest::summonitem(19307);}
  elsif (plugin::check_handin(\%itemcount,28216 => 1)){ #Lesser Summon Corpse
    quest::say("Excellent, Thank you, $class. Your spell has been scribed.");
    quest::setglobal("bot_spell_1",1,5,"F");
    $client->Message(6,"Your have scribed the spell Lesser Summon Corpse!");}
  elsif (plugin::check_handin(\%itemcount,15003 => 1)){ #Summon Corpse
    quest::say("Excellent, Thank you, $class. Your spell has been scribed.");
    quest::setglobal("bot_spell_1",2,5,"F");
    $client->Message(6,"Your have scribed the spell Summon Corpse!");}
  elsif (plugin::check_handin(\%itemcount,19307 => 1)){ #Conjure Corpse
    quest::say("Excellent, Thank you, $class. Your spell has been scribed.");
    quest::setglobal("bot_spell_1",3,5,"F");
    $client->Message(6,"Your have scribed the spell Conjure Corpse!");}

## Temperance
  elsif (($itemcount{59011} == 1) && ($bot_spell_4 == 1) | ($bot_spell_4 == 2)){ 
    quest::say("Those spells are already scribed.");
    quest::summonitem(59011);}
  elsif (($itemcount{59572} == 1) && ($bot_spell_4 == 2)){ 
    quest::say("Those spells are already scribed.");
    quest::summonitem(59572);}
  elsif (plugin::check_handin(\%itemcount,59011 => 1)){ #Temperance
    quest::say("Excellent, Thank you, $class. Your spell has been scribed.");
    quest::setglobal("bot_spell_4",1,5,"F");
    $client->Message(6,"Your have scribed the spell Temperance!");}
  elsif (plugin::check_handin(\%itemcount,59572 => 1)){ #Blessing of Temperance (not complete yet , just have the script ready).
    quest::say("Excellent, Thank you, $class. Your spell has been scribed.");
    quest::setglobal("bot_spell_4",2,5,"F");
    $client->Message(6,"Your have scribed the spell Blessing of Temperance!");}

## Circle Spells
  elsif (($ulevel>=50) && ($itemcount{30438} == 1) && ($itemcount{30398} == 1) &&
	($itemcount{30440} == 1)&& ($itemcount{77662} == 1) && ($bot_spell_2 == 3)){ 
    quest::say("You already have all these needed spells scribed.");
    quest::summonitem(129);
    quest::summonitem(30438);
    quest::summonitem(30398);
    quest::summonitem(30440);
    quest::summonitem(77662);}
  elsif (($itemcount{129} == 1) && ($bot_spell_2 == 1) | ($bot_spell_2 == 2) | ($bot_spell_2 == 3)){ 
    quest::say("Those spells are already scribed.");
    quest::summonitem(129);}
  elsif (($itemcount{135} == 1) && ($bot_spell_2 == 2) | ($bot_spell_2 == 3)){ 
    quest::say("Those spells are already scribed.");
    quest::summonitem(135);}
  elsif (($itemcount{131} == 1) && ($bot_spell_2 == 3)){ 
    quest::say("Those spells are already scribed.");
    quest::summonitem(131);}
elsif (($ulevel>=50) && ($itemcount{30438} == 1) && ($itemcount{30398} == 1) &&
	($itemcount{30440} == 1)&& ($itemcount{77662} == 1) && ($bot_spell_2 == 0)){
    $client->Message(6,"Your have scribed the spell Circle of Karana!");
    $client->Message(6,"Your have scribed the spell Circle of Commons!");
    $client->Message(6,"Your have scribed the spell Circle of Toxxulia!");
    $client->Message(6,"Your have scribed the spell Circle of Butcherblock!");
    $client->Message(6,"Your have scribed the spell Circle of Lavastorm!");
    $client->Message(6,"Your have scribed the spell Circle of Ro!");
    $client->Message(6,"Your have scribed the spell Circle of Ferrott!");
    $client->Message(6,"Your have scribed the spell Circle of Steamfont!");
    $client->Message(6,"Your have scribed the spell Circle of Iceclad Ocean!");
    $client->Message(6,"Your have scribed the spell Circle of Surefall Glade!");
    $client->Message(6,"Your have scribed the spell Circle of Grimling Forest!");
    $client->Message(6,"Your have scribed the spell Circle of The Nexus!");
    $client->Message(6,"Your have scribed the spell Circle of Stonbrunt Mountains!");
    $client->Message(6,"Your have scribed the spell Circle of Misty!");
    $client->Message(6,"Your have scribed the spell Circle of The Great Divide!"); #19516
    $client->Message(6,"Your have scribed the spell Circle of Wakening Lands!"); #30398
    $client->Message(6,"Your have scribed the spell Circle of Knowledge!");
    $client->Message(6,"Your have scribed the spell Wind of the South!");
    $client->Message(6,"Your have scribed the spell Wind of the North!");
    $client->Message(6,"Your have scribed the spell Circle of Twilight!");
    $client->Message(6,"Your have scribed the spell Circle of Dawnshroud!");
    $client->Message(6,"Your have scribed the spell Circle of Cobalt Scar!"); #30440
    $client->Message(6,"Your have scribed the spell Circle of The Combines!");
    $client->Message(6,"Your have scribed the spell Circle of Slaughter!");
    $client->Message(6,"Your have scribed the spell Circle of Bloodfields!"); #77662
    quest::say("Excellent, Thank you, $class. Your Bots Circle spells have been scribed.");
    quest::summonitem(129);
    quest::setglobal("bot_spell_2",3,5,"F");
    $bot_spell_2=undef;}
 elsif (($ulevel>=50) && ($itemcount{30438} == 1) && ($itemcount{30398} == 1) &&
	($itemcount{30440} == 1)&& ($itemcount{77662} == 1) && ($bot_spell_2 == 1)){
    $client->Message(6,"Your have scribed the spell Circle of Misty!");
    $client->Message(6,"Your have scribed the spell Circle of The Great Divide!"); #19516
    $client->Message(6,"Your have scribed the spell Circle of Wakening Lands!"); #30398
    $client->Message(6,"Your have scribed the spell Circle of Knowledge!");
    $client->Message(6,"Your have scribed the spell Wind of the South!");
    $client->Message(6,"Your have scribed the spell Wind of the North!");
    $client->Message(6,"Your have scribed the spell Circle of Twilight!");
    $client->Message(6,"Your have scribed the spell Circle of Dawnshroud!");
    $client->Message(6,"Your have scribed the spell Circle of Cobalt Scar!"); #30440
    $client->Message(6,"Your have scribed the spell Circle of The Combines!");
    $client->Message(6,"Your have scribed the spell Circle of Slaughter!");
    $client->Message(6,"Your have scribed the spell Circle of Bloodfields!"); #77662
    quest::say("Excellent, Thank you, $class. Your Bots Circle spells have been scribed.");
    quest::summonitem(129);
    quest::setglobal("bot_spell_2",3,5,"F");
    $bot_spell_2=undef;}
 elsif (($ulevel>=50) && ($itemcount{30438} == 1) && ($itemcount{30398} == 1) &&
	($itemcount{30440} == 1)&& ($itemcount{77662} == 1) && ($bot_spell_2 == 2)){
    $client->Message(6,"Your have scribed the spell Circle of Slaughter!");
    $client->Message(6,"Your have scribed the spell Circle of Bloodfields!"); #77662
    quest::say("Excellent, Thank you, $class. Your Bots Circle spells have been scribed.");
    quest::summonitem(129);
    quest::setglobal("bot_spell_2",3,5,"F");
    $bot_spell_2=undef;}
  elsif (plugin::check_handin(\%itemcount,129 => 1)){ #Lesser Moonstone of Circles for the spell scriber 
    $client->Message(6,"Your have scribed the spell Circle of Karana!");
    $client->Message(6,"Your have scribed the spell Circle of Commons!");
    $client->Message(6,"Your have scribed the spell Circle of Toxxulia!");
    $client->Message(6,"Your have scribed the spell Circle of Butcherblock!");
    $client->Message(6,"Your have scribed the spell Circle of Lavastorm!");
    $client->Message(6,"Your have scribed the spell Circle of Ro!");
    $client->Message(6,"Your have scribed the spell Circle of Ferrott!");
    $client->Message(6,"Your have scribed the spell Circle of Steamfont!");
    $client->Message(6,"Your have scribed the spell Circle of Iceclad Ocean!");
    $client->Message(6,"Your have scribed the spell Circle of Surefall Glade!");
    $client->Message(6,"Your have scribed the spell Circle of Grimling Forest!");
    $client->Message(6,"Your have scribed the spell Circle of The Nexus!");
    $client->Message(6,"Your have scribed the spell Circle of Stonbrunt Mountains!");
    quest::say("Excellent, Thank you, $class. Your Bots Lesser Moonstone of Circles spells have been scribed.");
    quest::setglobal("bot_spell_2",1,5,"F");
    $bot_spell_2=undef;}
  elsif (plugin::check_handin(\%itemcount,135 => 1)){ #Moonstone of Circles for the spell scriber 
    $client->Message(6,"Your have scribed the spell Circle of Misty!");
    $client->Message(6,"Your have scribed the spell Circle of The Great Divide!"); #19516
    $client->Message(6,"Your have scribed the spell Circle of Wakening Lands!"); #30398
    $client->Message(6,"Your have scribed the spell Circle of Knowledge!");
    $client->Message(6,"Your have scribed the spell Wind of the South!");
    $client->Message(6,"Your have scribed the spell Wind of the North!");
    $client->Message(6,"Your have scribed the spell Circle of Twilight!");
    $client->Message(6,"Your have scribed the spell Circle of Dawnshroud!");
    $client->Message(6,"Your have scribed the spell Circle of Cobalt Scar!"); #30440
    $client->Message(6,"Your have scribed the spell Circle of The Combines!");
    quest::say("Excellent, Thank you, $class. Your Bots Moonstone of Circles spells have been scribed.");
    quest::setglobal("bot_spell_2",2,5,"F");
    $bot_spell_2=undef;}
  elsif (plugin::check_handin(\%itemcount,131 => 1)){ #Greater Moonstone of Circles for the spell scriber 
    $client->Message(6,"Your have scribed the spell Circle of Slaughter!");
    $client->Message(6,"Your have scribed the spell Circle of Bloodfields!"); #77662
    quest::say("Excellent, Thank you, $class. Your Bots Greater Moonstone of Circles spells have been scribed.");
    quest::setglobal("bot_spell_2",3,5,"F");
    $bot_spell_2=undef;}
## Portal Spells
  elsif (($ulevel>=50) && ($itemcount{30399} == 1) && ($itemcount{30423} == 1)&& ($itemcount{30425} == 1)&& 
	($itemcount{77661} == 1) && ($bot_spell_3 == 3)){ 
    quest::say("You already have all these needed spells scribed.");
    quest::summonitem(130);
    quest::summonitem(30399);
    quest::summonitem(30423);
    quest::summonitem(30425);
    quest::summonitem(77661);}
  elsif (($itemcount{130} == 1) && ($bot_spell_3 == 1) | ($bot_spell_3 == 2) | ($bot_spell_3 == 3)){ 
    quest::say("Those spells are already scribed.");
    quest::summonitem(130);}
  elsif (($itemcount{136} == 1) && ($bot_spell_3 == 2) | ($bot_spell_3 == 3)){ 
    quest::say("Those spells are already scribed.");
    quest::summonitem(136);}
  elsif (($itemcount{132} == 1) && ($bot_spell_3 == 3)){ 
    quest::say("Those spells are already scribed.");
    quest::summonitem(132);}
  elsif (($ulevel>=50) && ($itemcount{30399} == 1) && ($itemcount{30423} == 1)&& ($itemcount{30425} == 1)&& 
	($itemcount{77661} == 1) && ($bot_spell_3 == 0)){
    $client->Message(6,"Your have scribed the spell Fay Portal!");
    $client->Message(6,"Your have scribed the spell Ro Portal!");
    $client->Message(6,"Your have scribed the spell Toxxula Portal!");
    $client->Message(6,"Your have scribed the spell North Karana Portal!");
    $client->Message(6,"Your have scribed the spell Nektulos Portal!");
    $client->Message(6,"Your have scribed the spell West Karana Portal!");
    $client->Message(6,"Your have scribed the spell Dawnshroud Portal!");
    $client->Message(6,"Your have scribed the spell Nexus Portal!");
    $client->Message(6,"Your have scribed the spell Plane of Knowledge Portal!");
    $client->Message(6,"Your have scribed the spell Stonebrunt Portal!");
    $client->Message(6,"Your have scribed the spell Grimling Forest Portal!");
    $client->Message(6,"Your have scribed the spell Twilight Portal!");
    $client->Message(6,"Your have scribed the spell Iceclad Ocean Portal!");
    $client->Message(6,"Your have scribed the spell Commons Portal!");
    $client->Message(6,"Your have scribed the spell Wakening Lands Portal!"); #30399
    $client->Message(6,"Your have scribed the spell Emerald Jungle Portal!");
    $client->Message(6,"Your have scribed the spell Hate Plane Portal!");
    $client->Message(6,"Your have scribed the spell Airplane Portal!");
    $client->Message(6,"Your have scribed the spell Skyfire Portal!");
    $client->Message(6,"Your have scribed the spell Great Divide Portal!"); #30423
    $client->Message(6,"Your have scribed the spell Cobalt Scar Portal!"); #30425
    $client->Message(6,"Your have scribed the spell Combines Portal!");
    $client->Message(6,"Your have scribed the spell Wall of Slaughter Portal!");
    $client->Message(6,"Your have scribed the spell Bloodfields Portal!"); # 77661
    quest::say("Excellent, Thank you, $class. Your Bots Portal spells have been scribed.");
    quest::summonitem(130);
    quest::setglobal("bot_spell_3",3,5,"F");}
  elsif (($ulevel>=50) && ($itemcount{30399} == 1) && ($itemcount{30423} == 1)&& ($itemcount{30425} == 1)&& 
	($itemcount{77661} == 1) && ($bot_spell_3 == 1)){
    $client->Message(6,"Your have scribed the spell Twilight Portal!");
    $client->Message(6,"Your have scribed the spell Iceclad Ocean Portal!");
    $client->Message(6,"Your have scribed the spell Commons Portal!");
    $client->Message(6,"Your have scribed the spell Wakening Lands Portal!"); #30399
    $client->Message(6,"Your have scribed the spell Emerald Jungle Portal!");
    $client->Message(6,"Your have scribed the spell Hate Plane Portal!");
    $client->Message(6,"Your have scribed the spell Airplane Portal!");
    $client->Message(6,"Your have scribed the spell Skyfire Portal!");
    $client->Message(6,"Your have scribed the spell Great Divide Portal!"); #30423
    $client->Message(6,"Your have scribed the spell Cobalt Scar Portal!"); #30425
    $client->Message(6,"Your have scribed the spell Combines Portal!");
    quest::say("Excellent, Thank you, $class. Your Bots Portal spells have been scribed.");
    quest::summonitem(130);
    quest::setglobal("bot_spell_3",3,5,"F");}
  elsif (($ulevel>=50) && ($itemcount{30399} == 1) && ($itemcount{30423} == 1)&& ($itemcount{30425} == 1)&& 
	($itemcount{77661} == 1) && ($bot_spell_3 == 2)){
    $client->Message(6,"Your have scribed the spell Wall of Slaughter Portal!");
    $client->Message(6,"Your have scribed the spell Bloodfields Portal!"); # 77661
    quest::say("Excellent, Thank you, $class. Your Bots Portal spells have been scribed.");
    quest::summonitem(130);
    quest::setglobal("bot_spell_3",3,5,"F");}
  elsif (plugin::check_handin(\%itemcount,130 => 1)){ #Lesser Moonstone of Portals for the spell scriber 
    $client->Message(6,"Your have scribed the spell Fay Portal!");
    $client->Message(6,"Your have scribed the spell Ro Portal!");
    $client->Message(6,"Your have scribed the spell Toxxula Portal!");
    $client->Message(6,"Your have scribed the spell North Karana Portal!");
    $client->Message(6,"Your have scribed the spell Nektulos Portal!");
    $client->Message(6,"Your have scribed the spell West Karana Portal!");
    $client->Message(6,"Your have scribed the spell Dawnshroud Portal!");
    $client->Message(6,"Your have scribed the spell Nexus Portal!");
    $client->Message(6,"Your have scribed the spell Plane of Knowledge Portal!");
    $client->Message(6,"Your have scribed the spell Stonebrunt Portal!");
    $client->Message(6,"Your have scribed the spell Grimling Forest Portal!");
    quest::say("Excellent, Thank you, $class. Your Bots Lesser Moonstone of Portal spells have been scribed.");
    quest::setglobal("bot_spell_3",1,5,"F");}
  elsif (plugin::check_handin(\%itemcount,136 => 1)){ #Moonstone of Portals for the spell scriber 
    $client->Message(6,"Your have scribed the spell Twilight Portal!");
    $client->Message(6,"Your have scribed the spell Iceclad Ocean Portal!");
    $client->Message(6,"Your have scribed the spell Commons Portal!");
    $client->Message(6,"Your have scribed the spell Wakening Lands Portal!"); #30399
    $client->Message(6,"Your have scribed the spell Emerald Jungle Portal!");
    $client->Message(6,"Your have scribed the spell Hate Plane Portal!");
    $client->Message(6,"Your have scribed the spell Airplane Portal!");
    $client->Message(6,"Your have scribed the spell Skyfire Portal!");
    $client->Message(6,"Your have scribed the spell Great Divide Portal!"); #30423
    $client->Message(6,"Your have scribed the spell Cobalt Scar Portal!"); #30425
    $client->Message(6,"Your have scribed the spell Combines Portal!");
    quest::say("Excellent, Thank you, $class. Your Bots Moonstone of Portal spells have been scribed.");
    quest::setglobal("bot_spell_3",2,5,"F");}
  elsif (plugin::check_handin(\%itemcount,132 => 1)){ #Greater Moonstone of Portals for the spell scriber 
    $client->Message(6,"Your have scribed the spell Wall of Slaughter Portal!");
    $client->Message(6,"Your have scribed the spell Bloodfields Portal!"); # 77661
    quest::say("Excellent, Thank you, $class. Your Bots Greater Moonstone of Portal spells have been scribed.");
    quest::setglobal("bot_spell_3",3,5,"F");}
  else {
    quest::say("I have no use for this");
    plugin::return_items(\%itemcount);}
}

# END of FILE Zone:many -- #Anita_Thrall.pl
Reply With Quote
  #4  
Old 02-01-2010, 04:52 PM
Tilar
Sarnak
 
Join Date: Oct 2009
Posts: 35
Default

Actually this one is simple and seems to work alright.

Code:
sub EVENT_SAY { 
if($text=~/Hail/i){
quest::say("Greetings $name, I can scribe all of your [spells] if you wish.") ;}

if ($text=~/spells/i) { quest::say("Scribing your spells $name!");
quest::scribespells(65); }
}


#END of FILE Zone:poknowledge
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

   

All times are GMT -4. The time now is 07:40 PM.


 

Everquest is a registered trademark of Daybreak Game Company LLC.
EQEmulator is not associated or affiliated in any way with Daybreak Game Company LLC.
Except where otherwise noted, this site is licensed under a Creative Commons License.
       
Powered by vBulletin®, Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Template by Bluepearl Design and vBulletin Templates - Ver3.3