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 11-30-2010, 05:43 AM
blackdragonsdg
Dragon
 
Join Date: Dec 2008
Location: Tennessee
Posts: 656
Default

Good news is using this worked:
Code:
elsif ($class eq "Warrior" && plugin::check_handin(\%itemcount, 219592 => 1)) {
While I understand your use of logic flow in this instance it does contradict logic in a way. The point of using && is so that two conditions must check true before the entire statement is declared true. If that were the case then the first elsif should have failed causing the script to move onto the next elsif.
This functioned more like an || where if either condition checks true then the entire statement is true. If that were the case then it should have done as you suggested where the first check was true so the entire statement was declared true causing the entire script to stop.
Using logic like that means you could put two 1’s into a NAND gate and get a 1 out which would defy mechanical logic. Guess this is why mechanical logic and programming logic are very, very different.
Reply With Quote
  #2  
Old 11-30-2010, 06:38 AM
trevius's Avatar
trevius
Developer
 
Join Date: Aug 2006
Location: USA
Posts: 5,946
Default

Well, the reason it works as I explained is because if it finds a false in the first check, there is no need to go past that unless there was an || (OR) statement after the first check.

If your check resulted in the following:

Code:
elsif (false && true) {
Then, perl already knew it wasn't going to pass the check by the time it reached the &&, so there wasn't a reason to even bother checking the second one. This logic is good in multiple ways. One bonus is that it saves processing time, as it doesn't need to even bother checking after it reaches a false. Another nice thing about it working like that is that you can check for things that require other things without risking a null pointer zone crash. Here is an example:

Code:
if ($npc->GetTarget() && $npc->GetTarget()->IsClient())
So, this will only check if the NPC's target is a client IF the NPC actually has a target in the first place. If you tried to do this:

Code:
if ($npc->GetTarget()->IsClient())
without first making sure the NPC has a target, you would be opening up a possible zone crash.

Since the example I gave checks for a target first, and then checks if that target is a client, it is safe from crashes. If Perl worked like you thought it did, that example would still be open to crash issues, as it would check both no matter what.
__________________
Trevazar/Trevius Owner of: Storm Haven
Everquest Emulator FAQ (Frequently Asked Questions) - Read It!
Reply With Quote
  #3  
Old 11-30-2010, 09:20 PM
neiv2
Hill Giant
 
Join Date: Mar 2009
Location: CO
Posts: 183
Default

I always had trouble getting the script to work when stating it positively (e.g., if($class eq 'Shaman')), so I ended up stating it negatively (e.g., if($class ne 'Shaman')) in questions like this one.
Reply With Quote
Reply

Thread Tools
Display Modes

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:47 AM.


 

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