EQEmulator Forums

EQEmulator Forums (https://www.eqemulator.org/forums/index.php)
-   Quests::Q&A (https://www.eqemulator.org/forums/forumdisplay.php?f=599)
-   -   Start Chat With Item? (https://www.eqemulator.org/forums/showthread.php?t=43216)

Bytebait 03-01-2021 02:23 PM

Start Chat With Item?
 
There's got to be a way to start a chat with an Item, like in a classic D&D session where your sword talks to you. Is there an Item already in game that I can see how it's done and if not, how would I go about doing this?

Huppy 03-01-2021 02:30 PM

EVENT_ITEM_CLICK in an item quest script, would be my first thought.

Bytebait 03-01-2021 02:54 PM

Ok, I think I have the start of it. In case anyone else needs this.
create a script in quests/global/items/script_5000.pl for example

#the itemid is the number of your item you're trying to click.
sub EVENT_ITEM_CLICK {
if($itemid == 147498 ){
$client->Message(15, "I hope you can see this!");
}
}


In Peq , On the Edit Item page there is a Script File ID. This would be 5000 as it ignores the script_ portion of the filename.

Bytebait 03-01-2021 04:48 PM

Ok, the following does the following, but does not 'listen' to a reply from the client. When item 147498 is clicked, its prints out "Pick True or False 'True' or 'False'.
clicking either True or False will have your character say
says 'True'
says 'False'

What am I missing to have the elsif listen to the True or False? Can it be done from an item?


Code:

sub EVENT_ITEM_CLICK {
        if($itemid == 147498){
                EVENT_SAY();
        }
}


sub EVENT_SAY{
        if($itemid == 147498){
                $client->Message(15, "Pick True or False [" . quest::saylink("True") . "].  or [" . quest::saylink("False") . "].");
        }       
        elsif ($text=~/True/i) {
                $client->Message(15, "You picked True.");       
                quest::ding();       
        }
        elsif ($text=~/False/i) {
                $client->Message(15, "You picked False.");
                quest::ding();
               
        }
}


Splose 03-01-2021 08:30 PM

Quote:

Originally Posted by Bytebait (Post 266263)
Ok, the following does the following, but does not 'listen' to a reply from the client. When item 147498 is clicked, its prints out "Pick True or False 'True' or 'False'.
clicking either True or False will have your character say
says 'True'
says 'False'

What am I missing to have the elsif listen to the True or False? Can it be done from an item?


Code:

sub EVENT_ITEM_CLICK {
        if($itemid == 147498){
                EVENT_SAY();
        }
}


sub EVENT_SAY{
        if($itemid == 147498){
                $client->Message(15, "Pick True or False [" . quest::saylink("True") . "].  or [" . quest::saylink("False") . "].");
        }       
        elsif ($text=~/True/i) {
                $client->Message(15, "You picked True.");       
                quest::ding();       
        }
        elsif ($text=~/False/i) {
                $client->Message(15, "You picked False.");
                quest::ding();
               
        }
}


You need to remove the event say and put it in global_player.pl or the player.pl in the specific zone folder you want this to work in. Its best to make the saylink silent and make a fake command for it.

Code:

        # quest::saylink("#pick true",1,"True");
        # quest::saylink("#pick false",1,"False");
        if($text=~/#pick/i) {
                my @arg = split(' ', $text);
                if($arg[1] eq "true") {
                        #do something
                } elsif ($arg[1] eq "false") {
                        #do something different
                } else {
                        #do something else entirely
                }
        }


Bytebait 03-02-2021 03:45 PM

Perfect, thank you!


All times are GMT -4. The time now is 12:22 PM.

Powered by vBulletin®, Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.