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

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

 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
  #1  
Old 06-05-2007, 01:45 AM
Budaworm
Fire Beetle
 
Join Date: Oct 2003
Posts: 20
Default check player for item

I've been trying to figure out how to write a quest plugin that checks the player to see if they have an item and returns true if the item is found. So say I do something like this:
Code:
if(plugin::check_hasitem(1001)) {$npc->Say("$name has a Cloth Cap");}
If the person has a Cloth Cap on them the npc will say xxx has a Cloth Cap. You might be saying well why don't you use $hasitem, I tried looking around for information on that and couldn't find any. Then I tried checking the source code and couldn't figure out the proper syntax to use it and it looked like it only checked slots 0-29. So here is the code I've written for my check_hasitem.pl file in my plugins folder:

Code:
#checks to see if player has item
#useage plugin::check_hasitem(itemid);
sub check_hasitem {
    my $itmchk = shift;
    my $slot1;
    my $itemid1;
#Check main inventory and cursor
    for($slot1=0; $slot1<=30; $slot1++) {
        $itemid1=$client->GetItemIDAt($slot1);
        if($itemid1==$itmchk) {
            return 1;
        }
    }
#Check main inventory's and cursor's containers
    for($slot1=251; $slot1<340; $slot1++) {
        $itemid1=$client->GetItemIDAt($slot1);
        if($itemid1==$itmchk) {
            return 1;
        }
    }
#Check bank slots
    for($slot1=2000; $slot1<2015; $slot1++) {
        $itemid1=$client->GetItemIDAt($slot1);
        if($itemid1==$itmchk) {
            return 1;
        }
    }
#Check bank's containers
    for($slot1=2030; $slot1<2190; $slot1++) {
        $itemid1=$client->GetItemIDAt($slot1);
        if($itemid1==$itmchk) {
            return 1;
        }
    }
#Check shared bank
    for($slot1=2500; $slot1<2501; $slot1++) {
        $itemid1=$client->GetItemIDAt($slot1);
        if($itemid1==$itmchk) {
            return 1;
        }
    }
#Check shared bank's containers
    for($slot1=2531; $slot1<2550; $slot1++) {
        $itemid1=$client->GetItemIDAt($slot1);
        if($itemid1==$itmchk) {
            return 1;
        }
    }
    return 0;
}
The problem I'm having is $client->GetItemIDAt(); doesn't work. I've already tested using this with a standard npc quest (written differently but does the same thing) and it works because I can use the $client->GetItemIDAt(); command. Can anyone tell me how to get this working?

Heres the code I've been using on a npc to test to see if it works. The reason I don't want to use something like this is because it adds alot of useless code if I can get it working as a plugin.
Code:
sub EVENT_SAY {
    if($text=~/Hail/i) {
    quest::say("Would you like me to perform an [item check] on you?");
    }
    if($text=~/item check/i) {
        my $itmchk = 1001;
        my $itmnme = "Cloth Cap";
        my $slot1;
        my $itemid1;
        my $founditem = 0;
#Check main inventory and cursor
    for($slot1=0; $slot1<=30; $slot1++) {
        $itemid1=$client->GetItemIDAt($slot1);
        if($itemid1==$itmchk) {
            $npc->Say("$itmnme found in inventory at slot: $slot1");
            $founditem = 1;
        }
    }
#Check main inventory's and cursor's containers
    for($slot1=251; $slot1<=340; $slot1++) {
        $itemid1=$client->GetItemIDAt($slot1);
        if($itemid1==$itmchk) {
            $npc->Say("$itmnme found in inventory container at slot: $slot1");
            $founditem = 1;
        }
    }
#Check bank slots
    for($slot1=2000; $slot1<=2015; $slot1++) {
        $itemid1=$client->GetItemIDAt($slot1);
        if($itemid1==$itmchk) {
            $npc->Say("$itmnme found in bank at slot: $slot1");
            $founditem = 1;
        }
    }
#Check bank's containers
    for($slot1=2031; $slot1<=2190; $slot1++) {
        $itemid1=$client->GetItemIDAt($slot1);
        if($itemid1==$itmchk) {
            $npc->Say("$itmnme found in bank container at slot: $slot1");
            $founditem = 1;
        }
    }
#Check shared bank
    for($slot1=2500; $slot1<=2501; $slot1++) {
        $itemid1=$client->GetItemIDAt($slot1);
        if($itemid1==$itmchk) {
            $npc->Say("$itmnme found in shared bank at slot: $slot1");
            $founditem = 1;
        }
    }
#Check shared bank's containers
    for($slot1=2531; $slot1<=2550; $slot1++) {
        $itemid1=$client->GetItemIDAt($slot1);
        if($itemid1==$itmchk) {
            $npc->Say("$itmnme found in shared bank container at slot: $slot1");
            $founditem = 1;
        }
    }
    if($founditem==0) {$npc->Say("$itmnme cap not found");}
    }
EDIT: Fixed some typos and added my npc quest code

Last edited by Budaworm; 06-05-2007 at 10:12 AM..
Reply With Quote
 


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 08:17 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