View Single Post
  #1  
Old 04-23-2002, 06:36 AM
Malevolent
Hill Giant
 
Join Date: Mar 2002
Posts: 171
Default 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
Reply With Quote