Go Back   EQEmulator Home > EQEmulator Forums > Development > Development::Development

Development::Development Forum for development topics and for those interested in EQEMu development. (Not a support forum)

Reply
 
Thread Tools Display Modes
  #1  
Old 07-12-2011, 10:54 AM
Congdar
Developer
 
Join Date: Jul 2007
Location: my own little world
Posts: 751
Default

it's probly your semi-colon in your SELECT string. btw, if this call is made a lot, it will slow down your server. if possible, try to make as few db calls as possible and store information in memory/bot object
EDIT:
the closing right parin for MakeAnyLenString should go after the ending quote.
__________________
The Realm
Reply With Quote
  #2  
Old 07-12-2011, 03:34 PM
Criimson
Hill Giant
 
Join Date: Sep 2006
Posts: 172
Default

Well I tried your suggestions and it is still crashing zone when it is called.

After looking through mysql.h definitions I see:

MYSQL_FIELD *fields;
MYSQL_DATA *data;
MYSQL_ROWS *data_cursor;

MYSQL_ROWS - Is to pull up associated rows

To read a single cell could I use the MYSQL_FIELD or MYSQL_DATA?
Seems there should be a way.

Something like:
Code:
uint32 len_query = MakeAnyLenString(&query, "SELECT values FROM bot_variables WHERE bot_variable = 'auto_rune'");
	
	if (database.RunQuery(query, len_query, errbuf, &result)) {
	     safe_delete_array(query);
						
	value = mysql_fetch_field(result);
	if (value == "0"){
		continue;
             }
But alot of this type of coding is a learning experience for me.

Criimson
Reply With Quote
  #3  
Old 07-12-2011, 03:51 PM
Derision
Developer
 
Join Date: Feb 2004
Location: UK
Posts: 1,540
Default

It would be much easier to do this via the rules system, e.g. go to common/ruletypes.h and goto around line 354 where you will see this:
Code:
#ifdef BOTS
RULE_CATEGORY ( Bots )
RULE_REAL ( Bots, BotManaRegen, 2.0 ) // Adjust mana regen for bots, 1 is fast and higher numbers slow it down 3 is about the same as players.
RULE_BOOL ( Bots, BotFinishBuffing, false ) // Allow for buffs to complete even if the bot caster is out of mana.  Only affects buffing out of combat.
RULE_INT ( Bots, CreateBotCount, 150 ) // Number of bots that each account can create
RULE_INT ( Bots, SpawnBotCount, 71 ) // Number of bots a character can have spawned at one time, You + 71 bots is a 12 group raid
RULE_BOOL ( Bots, BotQuest, false ) // Optional quest method to manage bot spawn limits using the quest_globals name bot_spawn_limit, see: /bazaar/Aediles_Thrall.pl
RULE_BOOL ( Bots, BotGroupBuffing, false ) // Bots will cast single target buffs as group buffs, default is false for single. Does not make single target buffs work for MGB.
RULE_BOOL ( Bots, BotSpellQuest, false ) // Anita Thrall's (Anita_Thrall.pl) Bot Spell Scriber quests.
RULE_CATEGORY_END()
#endif
Then add:
Code:
RULE_BOOL (Bots, AutoRune, true)
just after RULE_BOOL ( Bots, BotSpellQuest, false )

(this is assuming you want AutoRune to default to true.)

Then at the point in the code were you want to test the value of this rule:
Code:
if(RuleB(Bots, AutoRune))
{
      // Do AutoRune stuff
}
The first time you go in game after adding your new rule to the source and recompiling, if you issue the command #rules store, it will write the current values into the database, then if you go into your rule_values table and search for Bots:AutoRune you can set it to false if you decide you want to disable that feature.
Reply With Quote
  #4  
Old 07-12-2011, 04:11 PM
Derision
Developer
 
Join Date: Feb 2004
Location: UK
Posts: 1,540
Default

Things to be aware of if you do want to read the database directly:

if database.RunQuery returns false, your DatasetResult will be NULL, i.e. invalid, so all you should do is send some debugging info to the zone log,
free the query if you allocated the memory with MakeAnyLenString, and then bail out, e.g.:
Code:
printf("Query: %s failed with error %s\n", Query, TempErrorMessageBuffer);
fflush(stdout);
safe_delete_array(Query);
return;
Also, if the query is successful, it can still return zero rows, so you need to call mysql_num_rows(DatasetResult) and check it is >0 before calling mysql_fetch_row(),
and/or check mysql_fetch_row() doesn't return NULL when you call it before attempting to process the returned row.
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 07:36 PM.


 

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 - 2026, Jelsoft Enterprises Ltd.
Template by Bluepearl Design and vBulletin Templates - Ver3.3