| 
   | 
   | 
  
 
    | 
    | 
    | 
  
 
    | 
   | 
    | 
  
 
    | 
   | 
    | 
  
 
    | 
   | 
    | 
  
 
   | 
  
	
		
   
   
      | Quests::Custom Custom Quests here | 
    
    
   
   
   
   
   
   
   
   
		 
	 
 
	
	
		
	
	
 
    | 
   | 
    | 
  
 
	
		
		
		
			
			 
			
				06-20-2010, 02:17 PM
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Sarnak 
				
				
				
			 | 
			  | 
			
				
				
					Join Date: Jan 2010 
					
					
					
						Posts: 38
					 
					
					
					
					     
				 
				
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
			
			
				 
				Object Builder
			 
			 
			
		
		
		
		Secrets has made a very very nice perl implementation! 
http://www.eqemulator.org/forums/sho...d.php?p=188939
I created an Object Builder NPC - many thanks to Secrets for this great perlport! 
Create an NPC with that perl code and Hail him!
 
Info: 
When setting the model, you can skip the _ACTORDEF, it will be automatically added
 
	Code: 
	sub EVENT_SAY {
	
	if (!$client->GetGM()) {
		$client->Message(15, "You have no access to object creation!");
		return;
	}
	
	if ($text =~ /Hail/) {
		$client->Message(15, "Object Creation Commandlist");
		$client->Message(15, "=============");
		$client->Message(15, "object dbdel [object_id]");
		$client->Message(15, "object dbsave [object_id]");
		$client->Message(15, "object create fromitem [itemid]");
		$client->Message(15, "object create frommodel [model]");
		$client->Message(15, "object list");
		$client->Message(15, "object set [object_id] location [x] [y] [z]");
		$client->Message(15, "object set [object_id] model [model]");
		$client->Message(15, "object set [object_id] type [0-255]");
		$client->Message(15, "object view [object_id]");
		$client->Message(15, "=============");
		$client->Message(15, "End of list");
		return;
	}
	
	@arguments = split(' ',$text);
	if ($arguments[0] ne "object") {
		return;
	}
	
	if ($arguments[1] eq "list") {
		my @objectList = $entity_list->GetObjectList();
		$client->Message(15, "Object list: ");
		$client->Message(15, "=============");
		foreach my $object (@objectList) {
			$client->Message(15, GetObjectInfo($object));
		}
		$client->Message(15, "=============");
		$client->Message(15, "End of list");
	}
	
	if ($arguments[1] eq "view") {
		$obj = $entity_list->GetObjectByID($arguments[2]);
		if (!$obj) {
			$client->Message(15, "Object with ID ".$arguments[2]." does not exist!");
		}
		else {
			$client->Message(15, GetObjectInfo($obj));
		}
	}
	
	if ($arguments[1] eq "create") {
		if ($arguments[2] eq "frommodel") {
			$model = BuildObjectModel($arguments[3]);
			$entityId = quest::creategroundobjectfrommodel($model, $x, $y, $z, $h);
			$client->Message(15, "Object created.");
			$obj = $entity_list->GetObjectByID($entityId);
			$client->Message(15, GetObjectInfo($obj));
		}
		if ($arguments[2] eq "fromitem") {
			$itemid = $arguments[3];
			$entityId = quest::creategroundobject($itemid, $x, $y, $z, $h);
			$client->Message(15, "Object created.");
			$obj = $entity_list->GetObjectByID($entityId);
			$client->Message(15, GetObjectInfo($obj));
		}
	}
	
	if ($arguments[1] eq "set") {
		$entityId = $arguments[2];
		$obj = $entity_list->GetObjectByID($arguments[2]);
		if (!$obj) {
			$client->Message(15, "Object with ID ".$arguments[2]." does not exist!");
		}
		else {
			my $updated = false;
			if ($arguments[3] eq "location") {
				if ($arguments[6] eq "") {
					$client->Message(15, "Usage: set [ObjectID] location x y z");
				}
				else {
					$obj->SetX($arguments[4]);
					$obj->SetY($arguments[5]);
					$obj->SetZ($arguments[6]);
					$updated = true;
				}
			}
			if ($arguments[3] == "model") {
				if ($arguments[4] eq "") {
					$client->Message(15, "Usage: set [ObjectID] model modelname");
				}
				else {
					$obj->SetModelName(BuildObjectModel($arguments[4]));
					$updated = true;
				}
			}
			if ($arguments[3] == "type") {
				if ($arguments[4] eq "") {
					$client->Message(15, "Usage: set [ObjectID] type [0-255]");
				}
				else {
					$obj->SetType($arguments[4]);
					$updated = true;
				}
			}
			
			
			if ($updated) {
				$client->Message(15, "Object Updated.");
				$client->Message(15, GetObjectInfo($obj));
			}
		}
	}
	
	if ($arguments[1] eq "dbsave") {
		$entityId = $arguments[2];
		$obj = $entity_list->GetObjectByID($entityId);
		if (!$obj) {
			$client->Message(15, "Object with ID ".$entityId." does not exist!");
		}
		else {
			$newid = $obj->VarSave();
			$client->Message(15, "Object saved to database: ID $newid");
			$client->Message(15, GetObjectInfo($obj));
		}
	}	
	if ($arguments[1] eq "dbdel") {
		$entityId = $arguments[2];
		$obj = $entity_list->GetObjectByID($arguments[2]);
		if (!$obj) {
			$client->Message(15, "Object with ID ".$arguments[2]." does not exist!");
		}
		else {
			$newid = $obj->Delete();
			$client->Message(15, "Object deleted from database");
			$client->Message(15, GetObjectInfo($obj));
		}
	}		
}
sub GetObjectInfo {
	my $object = $_[0];
	my $seperator = " || ";
	return "Object: ".
	"id: ".$object->GetID()
	.$seperator.
	 ($object->GetDBID() == 0 ? "not in db" : "dbid: ".$object->GetDBID())
	.$seperator.
	"type: ".$object->GetType()
	.$seperator.
	"model: ".$object->GetModelName()
	.$seperator.
	"location x,y,z, heading: ".int($object->GetX()).', '.int($object->GetY()).', '.int($object->GetZ()).", ".int($object->GetHeading())
	.$seperator.
	"icon: ".$object->GetIcon()
	.$seperator.
	"groundspawn: ".($object->IsGroundSpawn() ? "yes" : "no")
	;
}
sub BuildObjectModel {
	my $model = $_[0];
	if (substr($model,length($model)-9,9) ne "_ACTORDEF") {
		$model = $model . "_ACTORDEF";
	}
	return $model;
}
  
		
	
		
		
		
		
		
		
		
		
		
	
		
			
			
			
			
				 
			
			
			
			
			
			
				
			
			
			
		 
		
	
	
	 | 
 
 
 
    | 
   | 
    | 
  
 
	 
	
		 
	 
 
	
	
		
	
	
 
    | 
   | 
    | 
  
 
	
		
		
		
			
			 
			
				09-11-2010, 07:09 PM
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Administrator 
				
				
				
			 | 
			  | 
			
				
				
					Join Date: Feb 2009 
					Location: MN 
					
					
						Posts: 2,072
					 
					
					
					
					     
				 
				
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
			
			
				 
				
			 
			 
			
		
		
		
		
	Quote: 
	
	
		
			
				
					Originally Posted by  Zordana
					 
				 
				Secrets has made a very very nice perl implementation! 
http://www.eqemulator.org/forums/sho...d.php?p=188939
I created an Object Builder NPC - many thanks to Secrets for this great perlport! 
Create an NPC with that perl code and Hail him!
 
Info: 
When setting the model, you can skip the _ACTORDEF, it will be automatically added
 
	Code: 
	sub EVENT_SAY {
	
	if (!$client->GetGM()) {
		$client->Message(15, "You have no access to object creation!");
		return;
	}
	
	if ($text =~ /Hail/) {
		$client->Message(15, "Object Creation Commandlist");
		$client->Message(15, "=============");
		$client->Message(15, "object dbdel [object_id]");
		$client->Message(15, "object dbsave [object_id]");
		$client->Message(15, "object create fromitem [itemid]");
		$client->Message(15, "object create frommodel [model]");
		$client->Message(15, "object list");
		$client->Message(15, "object set [object_id] location [x] [y] [z]");
		$client->Message(15, "object set [object_id] model [model]");
		$client->Message(15, "object set [object_id] type [0-255]");
		$client->Message(15, "object view [object_id]");
		$client->Message(15, "=============");
		$client->Message(15, "End of list");
		return;
	}
	
	@arguments = split(' ',$text);
	if ($arguments[0] ne "object") {
		return;
	}
	
	if ($arguments[1] eq "list") {
		my @objectList = $entity_list->GetObjectList();
		$client->Message(15, "Object list: ");
		$client->Message(15, "=============");
		foreach my $object (@objectList) {
			$client->Message(15, GetObjectInfo($object));
		}
		$client->Message(15, "=============");
		$client->Message(15, "End of list");
	}
	
	if ($arguments[1] eq "view") {
		$obj = $entity_list->GetObjectByID($arguments[2]);
		if (!$obj) {
			$client->Message(15, "Object with ID ".$arguments[2]." does not exist!");
		}
		else {
			$client->Message(15, GetObjectInfo($obj));
		}
	}
	
	if ($arguments[1] eq "create") {
		if ($arguments[2] eq "frommodel") {
			$model = BuildObjectModel($arguments[3]);
			$entityId = quest::creategroundobjectfrommodel($model, $x, $y, $z, $h);
			$client->Message(15, "Object created.");
			$obj = $entity_list->GetObjectByID($entityId);
			$client->Message(15, GetObjectInfo($obj));
		}
		if ($arguments[2] eq "fromitem") {
			$itemid = $arguments[3];
			$entityId = quest::creategroundobject($itemid, $x, $y, $z, $h);
			$client->Message(15, "Object created.");
			$obj = $entity_list->GetObjectByID($entityId);
			$client->Message(15, GetObjectInfo($obj));
		}
	}
	
	if ($arguments[1] eq "set") {
		$entityId = $arguments[2];
		$obj = $entity_list->GetObjectByID($arguments[2]);
		if (!$obj) {
			$client->Message(15, "Object with ID ".$arguments[2]." does not exist!");
		}
		else {
			my $updated = false;
			if ($arguments[3] eq "location") {
				if ($arguments[6] eq "") {
					$client->Message(15, "Usage: set [ObjectID] location x y z");
				}
				else {
					$obj->SetX($arguments[4]);
					$obj->SetY($arguments[5]);
					$obj->SetZ($arguments[6]);
					$updated = true;
				}
			}
			if ($arguments[3] == "model") {
				if ($arguments[4] eq "") {
					$client->Message(15, "Usage: set [ObjectID] model modelname");
				}
				else {
					$obj->SetModelName(BuildObjectModel($arguments[4]));
					$updated = true;
				}
			}
			if ($arguments[3] == "type") {
				if ($arguments[4] eq "") {
					$client->Message(15, "Usage: set [ObjectID] type [0-255]");
				}
				else {
					$obj->SetType($arguments[4]);
					$updated = true;
				}
			}
			
			
			if ($updated) {
				$client->Message(15, "Object Updated.");
				$client->Message(15, GetObjectInfo($obj));
			}
		}
	}
	
	if ($arguments[1] eq "dbsave") {
		$entityId = $arguments[2];
		$obj = $entity_list->GetObjectByID($entityId);
		if (!$obj) {
			$client->Message(15, "Object with ID ".$entityId." does not exist!");
		}
		else {
			$newid = $obj->VarSave();
			$client->Message(15, "Object saved to database: ID $newid");
			$client->Message(15, GetObjectInfo($obj));
		}
	}	
	if ($arguments[1] eq "dbdel") {
		$entityId = $arguments[2];
		$obj = $entity_list->GetObjectByID($arguments[2]);
		if (!$obj) {
			$client->Message(15, "Object with ID ".$arguments[2]." does not exist!");
		}
		else {
			$newid = $obj->Delete();
			$client->Message(15, "Object deleted from database");
			$client->Message(15, GetObjectInfo($obj));
		}
	}		
}
sub GetObjectInfo {
	my $object = $_[0];
	my $seperator = " || ";
	return "Object: ".
	"id: ".$object->GetID()
	.$seperator.
	 ($object->GetDBID() == 0 ? "not in db" : "dbid: ".$object->GetDBID())
	.$seperator.
	"type: ".$object->GetType()
	.$seperator.
	"model: ".$object->GetModelName()
	.$seperator.
	"location x,y,z, heading: ".int($object->GetX()).', '.int($object->GetY()).', '.int($object->GetZ()).", ".int($object->GetHeading())
	.$seperator.
	"icon: ".$object->GetIcon()
	.$seperator.
	"groundspawn: ".($object->IsGroundSpawn() ? "yes" : "no")
	;
}
sub BuildObjectModel {
	my $model = $_[0];
	if (substr($model,length($model)-9,9) ne "_ACTORDEF") {
		$model = $model . "_ACTORDEF";
	}
	return $model;
}
  
			
		 | 
	 
	 
 This works very slick bro, great job.  
		
	
		
		
		
		
		
		
		
		
		
	
		
			
			
			
			
				 
			
			
			
			
			
			
				
			
			
			
		 
		
	
	
	 | 
 
 
 
    | 
   | 
    | 
  
 
	 
	
		 
	 
 
	
	
		
	
	
	
		
		
		
			
			 
			
				10-07-2011, 10:53 PM
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Sarnak 
				
				
				
			 | 
			  | 
			
				
				
					Join Date: Aug 2011 
					
					
					
						Posts: 72
					 
					
					
					
					     
				 
				
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
			
			
			 
			
		
		
		
		I automatically get the "You have no access to object creation!" even though my account is set at 255. 
  
		
	
		
		
		
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
	
		 
	 
 
	
	
		
	
	
	
		
		
		
			
			 
			
				10-08-2011, 02:37 AM
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Demi-God 
				
				
				
			 | 
			  | 
			
				
				
					Join Date: Aug 2010 
					
					
					
						Posts: 1,742
					 
					
					
					
					     
				 
				
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
			
			
			 
			
		
		
		
		#gm on first. 
		
	
		
		
		
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
	
		 
	 
 
	
	
		
	
	
	
		
		
		
			
			 
			
				10-08-2011, 01:45 PM
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Sarnak 
				
				
				
			 | 
			  | 
			
				
				
					Join Date: Aug 2011 
					
					
					
						Posts: 72
					 
					
					
					
					     
				 
				
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
			
			
			 
			
		
		
		
		Always something simple with me. 
Thanks, the Hail works now.
 
Maybe now that I have that working, I could get a bit of pointer. I type in #object list and it says Usage:#object ListAll(radius)
 
So I typed in #object ListAll 30  
#object ListAll 300 
#object ListAll(30) 
#object ListAll(300)
 
All near the small bank in PoK with no results. Keeps reprinting: Usage:#object ListAll(radius)
 
I figured I would pick up a crate or that wheelbarrow behind the building, but not getting any list. I am assuming that the radius will only return those items in range so I would have to find an item I want to place in another zone and then use that ID where I want to place?
 
So what about my usage isn't working?    
		
	
		
		
		
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
	
		 
	 
 
	
	
		
	
	
	
		
		
		
			
			 
			
				10-08-2011, 06:00 PM
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Demi-God 
				
				
				
			 | 
			  | 
			
				
				
					Join Date: Aug 2010 
					
					
					
						Posts: 1,742
					 
					
					
					
					     
				 
				
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
			
			
			 
			
		
		
		
		If you're typing #object you're not using the NPC at all.  Target the NPC and type 'object list' 
 
As for the #object command, what the usage actually says is "Usage: #object List All|(radius)", which means you should type "#object list all", or "#object list 5000", depending on if you want to list all or just the ones within a certain distance from you. 
		
	
		
		
		
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
	
		 
	 
 
	
	
		
	
	
	
		
		
		
			
			 
			
				10-08-2011, 09:15 PM
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Sarnak 
				
				
				
			 | 
			  | 
			
				
				
					Join Date: Aug 2011 
					
					
					
						Posts: 72
					 
					
					
					
					     
				 
				
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
			
			
			 
			
		
		
		
		Okay, that makes sense once you said it. I did as you said and received responses about nearby objects. 
 
I chose one and attempted to use object view, but it just reads out details. I don't actually see anything. Dunno if it's a crate, a torch, a wheelbarrow, a chair... who knows. 
 
Not knowing what I chose, I did an object create which appeared to do nothing, then did an object set of item id 8 at my coordinates which returned yellow text indicating I created object 8 at my coordinates, but groundspawn NO. Didn't see anything. 
 
Knowing all my previous questions and noobness, is this beyond me? I could just be satisfied with shit the way it is and stop wasting people's time... Gimme your opinion. 
		
	
		
		
		
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
	
		 
	 
 
	
	
		
	
	
 
    | 
   | 
    | 
  
 
	
		
		
		
			
			 
			
				10-10-2011, 01:02 PM
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Hill Giant 
				
				
				
			 | 
			  | 
			
				
				
					Join Date: Aug 2010 
					Location: UT 
					
					
						Posts: 215
					 
					
					
					
					     
				 
				
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
			
			
				 
				
			 
			 
			
		
		
		
		
	Quote: 
	
	
		
			
				
					Originally Posted by  Emmeric
					 
				 
				Knowing all my previous questions and noobness, is this beyond me? I could just be satisfied with shit the way it is and stop wasting people's time... Gimme your opinion. 
			
		 | 
	 
	 
 Stick with it Emmeric, you can figure it out. When I first looked into EQEmu and asked about running my own server I had a hater tell me if I couldn't figure it out I shouldn't be doing it. Well I did figure it out and I've done a ton of other "figuring out" since then on EQEmu.
 
So back on topic: I haven't figured all this out yet, but I noticed it lists tradeskill objects. I did successfully use the NPC to create an augment pool. I was able to successfullly delete that pool but I had to zone before I saw the changes.
 
There is an object that I am trying to identify so I can delete it, but I haven't figured that out yet. It is a dagger in the guildlobby that was sticking into a message board. I found the message boards and deleted them, but now I have a dagger hanging in space. Kinda fun since it is just the right height when I run into it, it makes me duck.
 
(I'll post more when I figure stuff out, but don't hold you breath as I have limited EQEmu time and thus take a long time to work through things like this.)  
		
	
		
		
		
		
		
		
		
		
		
	
		
			
			
			
			
				 
			
			
			
			
			
			
				
			
			
			
		 
		
	
	
	 | 
 
 
 
    | 
   | 
    | 
  
 
	 
	
		 
	 
 
	
	
		
	
	
	
		
		
		
			
			 
			
				10-10-2011, 05:55 PM
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Sarnak 
				
				
				
			 | 
			  | 
			
				
				
					Join Date: Aug 2011 
					
					
					
						Posts: 72
					 
					
					
					
					     
				 
				
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
			
			
			 
			
		
		
		
		
	Quote: 
	
	
		
			
				
					Originally Posted by  revloc02c
					 
				 
				 
So back on topic: I haven't figured all this out yet, but I noticed it lists tradeskill objects. 
			
		 | 
	 
	 
 Ahhh... that's why it showed nothing from nearby. I was expecting graphical objects like crates, benches, torches, rugs, etc.
 
Nuts, and I was hoping to make my fledgling custom merchant area look all busy with supplies and tents.    
I guess... I can just use the Bazaar.  
		
	
		
		
		
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
	
		 
	 
 
 
	
		
	
	
	
	
	
		
	
		 
		Posting Rules
	 | 
 
	
		
		You may not post new threads 
		You may not post replies 
		You may not post attachments 
		You may not edit your posts 
		 
		
		
		
		
		HTML code is Off 
		 
		
	  | 
 
 
	 | 
	
		
	 | 
 
 
All times are GMT -4. The time now is 09:16 PM. 
 
		 
	 
 
 
     | 
     | 
    
   
      | 
     | 
      | 
    
   
     | 
      | 
     | 
    
   
       | 
      | 
       | 
     
    
    
  | 
   |