| 
   | 
   | 
  
 
    | 
    | 
    | 
  
 
    | 
   | 
    | 
  
 
    | 
   | 
    | 
  
 
    | 
   | 
    | 
  
 
   | 
  
	
		
   
   
      | Archive::Development Archive area for Development's posts that were moved here after an inactivity period of 90 days. | 
    
    
   
   
   
   
   
   
   
   
		 
	 
 
	
	
		
	
	
 
    | 
   | 
    | 
  
 
	
		
		
		
			
			 
			
				04-23-2002, 06:36 AM
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Hill Giant 
				
				
				
			 | 
			  | 
			
				
				
					Join Date: Mar 2002 
					
					
					
						Posts: 171
					 
					
					
					
					     
				 
				
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
			
			
				 
				Dynamic Simple Quest Generation 1
			 
			 
			
		
		
		
		I have three ideas I'm experimenting with to implement pseudo-random. This is the first. 
Theory:
 
A random trigger to set off an auction in the auction channel for a given item sets a property on an individual mob --npc--. Then, should a player have an item and turn that item in, it results in some random reward.
 
Results:
 
No rewards yet, but the basics work.
 
Snippets:
 
	Code: 
	
npc::process
	if (this->MerchantType>0) 
		if (rand()%650==2){
			uint32 someitem = rand()%3500;
			Item_Struct* item = database.GetItem(someitem);
			
			if (item->name!=0) 
			if (rand()%2==0) {
				
				entity_list.Message(0,MT_Auction, "%s auctions, 'WTS %s'", GetName(), item->name);
			} else {
				this->SetItemRequested(someitem);
				entity_list.Message(0,MT_Auction, "%s auctions, 'WTT %s'", GetName(), item->name);
			}
			//else WTB
		}
npc.h
	/****************************************************
	Merchant Role & AutoQuest Gen
	*****************************************************/
	void	SetItemRequested(uint32 item) { ItemRequested=item;}
	uint32	GetItemRequested(){return ItemRequested;}
	uint32	ItemRequested;
client_process.cpp @2236
		QueuePacket(outapp);
									cout << "npc deal ended" << endl;
									InTrade = 0;
									TradeWithEnt = 0;
									delete outapp;
									if (tmp->IsNPC()) { 
										if (TradeList[0]==tmp->CastToNPC()->GetItemRequested()) {
											this->Message(MT_Say, "%s says, 'Thank you for your hard work!'", tmp->GetName());
											
											if (tmp->CastToNPC()->GetMaster() !=0)
												this->Message(MT_Say, "%s says, 'I'm sure %s will look kindly upon this act'", tmp->GetName(), tmp->CastToNPC()->GetMaster());
											//this->PutItemInInventory..
										} else {
											
											this->Message(MT_Say, "%s says, 'This is not what I wanted! No, not at all!'", tmp->GetName());
										}
										CheckQuests(zone->GetShortName(), "%%item%%", tmp->CastToNPC()->GetNPCTypeID(), TradeList[0]); 
									}
 Notes:
 
You can test this out on Malevolent's Lab, a publicly available server on the EQEmu Network.
 
--MV  
		
	
		
		
		
		
		
		
		
		
		
	
		
			
			
			
			
				 
			
			
			
			
			
			
				
			
			
			
		 
		
	
	
	 | 
 
 
 
    | 
   | 
    | 
  
 
	 
	
		 
	 
 
	
	
		
	
	
	
		
		
		
			
			 
			
				04-23-2002, 12:26 PM
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Discordant 
				
				
				
			 | 
			  | 
			
				
				
					Join Date: Jan 2002 
					
					
					
						Posts: 276
					 
					
					
					
					     
				 
				
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
			
			
			 
			
		
		
		
		heh you sure pushs emu to the limits nice!! 
		
	
		
		
		
		
		
		
			
				__________________ 
				Hmm...
			 
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
	
		 
	 
 
	
	
		
	
	
 
    | 
   | 
    | 
  
 
	
		
		
		
			
			 
			
				04-23-2002, 01:12 PM
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Hill Giant 
				
				
				
			 | 
			  | 
			
				
				
					Join Date: Mar 2002 
					
					
					
						Posts: 171
					 
					
					
					
					     
				 
				
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
			
			
				 
				
			 
			 
			
		
		
		
		This might be considered authentic verant. I turned in jboots and got a bronze claymore. Dah. :P 
Rewards snippet -- replace the obvious below with this update. Also may need 
 
client_process.cpp
 
	Code: 
	if (tmp->IsNPC()) { 
										if (TradeList[0]==tmp->CastToNPC()->GetItemRequested()) {
											
											this->Message(MT_Say, "%s says, 'Thank you for your hard work!'", tmp->GetName());
											
											if (tmp->CastToNPC()->GetMaster() !=0)
												this->Message(MT_Say, "%s says, 'I'm sure %s will look kindly upon this act'", tmp->GetName(), entity_list.RemoveNumbers(tmp->CastToNPC()->GetMaster()));
											uint32 somenum=rand()%32531;
											Item_Struct* award_item = database.GetItem(somenum);
											if (award_item->name!=0) {
												this->Message(MT_Emote, "%s opens a small box and hands you a %s'", tmp->GetName(), award_item->name);
												this->Message(MT_Say, "%s says, 'I hope you enjoy it!'", tmp->GetName());
												this->PutItemInInventory(0,award_item);
											} else {
												this->Message(MT_Say, "%s says, 'I haven't anything spare, but maybe you'll have learned something.'", tmp->GetName());
												this->AddEXP(somenum*10);
											}
										} else {
											
											this->Message(MT_Emotey, "%s looks oddly at what you just handed them.'", tmp->GetName());
										}
										CheckQuests(zone->GetShortName(), "%%item%%", tmp->CastToNPC()->GetNPCTypeID(), TradeList[0]); 
									}
 npc.cpp::process
 
	Code: 
		if (this->MerchantType>0) 
		if (rand()%650==2){
			uint32 someitem = rand()%32531;
			Item_Struct* item = database.GetItem(someitem);
			
			if (item->name!=0) 
			if (rand()%2==0) {
				
				entity_list.Message(0,MT_Auction, "%s auctions, 'WTS %s'", GetName(), item->name);
			} else {
				this->SetItemRequested(someitem);
				entity_list.Message(0,MT_Auction, "%s auctions, 'WTT %s'", GetName(), item->name);
			}
			//else WTB
		}
  
		
	
		
		
		
		
		
		
		
		
		
	
		
			
			
			
			
				 
			
			
			
			
			
			
				
			
			
			
		 
		
	
	
	 | 
 
 
 
    | 
   | 
    | 
  
 
	 
	
		 
	 
 
 
	
		
	
	
	
	
	
		
	
		 
		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 06:25 AM. 
 
		 
	 
 
 
     | 
     | 
    
   
      | 
     | 
      | 
    
   
     | 
      | 
     | 
    
   
       | 
      | 
       | 
     
    
    
  | 
   |