View Single Post
  #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