View Single Post
  #2  
Old 08-01-2004, 12:58 PM
jd255
Fire Beetle
 
Join Date: Apr 2004
Posts: 4
Default #npcspawn delete,update and #spawnfix

I reworked the sql portion of some code and got these working and this will require a db entry.

for the database in mysql type:
Code:
ALTER TABLE `eq`.`spawn2`
  CHANGE COLUMN `x` `x` float(14,6) NOT NULL DEFAULT 0,
  CHANGE COLUMN `y` `y` float(14,6) NOT NULL AFTER `x`,
  CHANGE COLUMN `z` `z` float(14,6) NOT NULL AFTER `y`,
  CHANGE COLUMN `heading` `heading` float(14,6) NOT NULL AFTER `z`;
for #npcspawn delete,update in npc.cpp search for Database::NPCSpawnDB scroll down to case 2 and replace

Code:
		case 2: { // update npc_type from target spawn - khuong
			if (RunQuery(query, MakeAnyLenString(&query, "UPDATE npc_types SET name=\"%s\", level=%i, race=%i, class=%i, hp=%i, gender=%i, texture=%i, helmtexture=%i, size=%i, loottable_id=%i, merchant_id=%i, face=%i, WHERE id=%i", spawn->GetName(), spawn->GetLevel(), spawn->GetRace(), spawn->GetClass(), spawn->GetMaxHP(), spawn->GetGender(), spawn->GetTexture(), spawn->GetHelmTexture(), spawn->GetSize(), spawn->GetLoottableID(), spawn->MerchantType, spawn->GetNPCTypeID()), errbuf, 0)) {
				safe_delete_array(query);
				return true;
			}
			else {
				safe_delete_array(query);
				return false;
			}
			break;
		}
		case 3: { // delete spawn from spawning - khuong
			if (RunQuery(query, MakeAnyLenString(&query, "SELECT id,spawngroupID from spawn2 where zone='%s' AND x='%f' AND y='%f' AND heading='%f'", zone, spawn->GetSpawnX(),spawn->GetSpawnY(),spawn->GetSpawnHeading()), errbuf, &result)) {
			row = mysql_fetch_row(result);
			if (row[0]) tmp = atoi(row[0]);
			if (row[1]) tmp2 = atoi(row[1]);
			query = 0;
			mysql_free_result(result);
			}
			else { return 0; }
			if (!RunQuery(query, MakeAnyLenString(&query, "DELETE FROM spawn2 WHERE id='%i'", tmp), errbuf,0)) {
				safe_delete(query);
				return false;
			}
			if (!RunQuery(query, MakeAnyLenString(&query, "DELETE FROM spawngroup WHERE id='%i'", tmp2), errbuf,0)) {
				safe_delete(query);
				return false;
			}
			if (!RunQuery(query, MakeAnyLenString(&query, "DELETE FROM spawnentry WHERE spawngroupID='%i'", tmp2), errbuf,0)) {
				safe_delete(query);
				return false;
			}
			safe_delete_array(query);
			return true;


			break;
		}
		case 4: { //delete spawn from DB (including npc_type) - khuong
			if (RunQuery(query, MakeAnyLenString(&query, "SELECT id,spawngroupID from spawn2 where zone='%s' AND x='%f' AND y='%f' AND heading='%f'", zone, spawn->GetX(), spawn->GetY(), spawn->GetHeading()), errbuf, &result)) {
			row = mysql_fetch_row(result);
			if (row[0]) tmp = atoi(row[0]);
			if (row[1]) tmp2 = atoi(row[1]);
			query = 0;
			mysql_free_result(result);
			}
			else { return 0; }
			if (!RunQuery(query, MakeAnyLenString(&query, "DELETE FROM spawn2 WHERE id='%i'", tmp), errbuf,0)) {
				safe_delete(query);
				return false;
			}
			if (!RunQuery(query, MakeAnyLenString(&query, "DELETE FROM spawngroup WHERE id='%i'", tmp2), errbuf,0)) {
				safe_delete(query);
				return false;
			}
			if (!RunQuery(query, MakeAnyLenString(&query, "DELETE FROM spawnentry WHERE spawngroupID='%i'", tmp2), errbuf,0)) {
				safe_delete(query);
				return false;
			}
			if (!RunQuery(query, MakeAnyLenString(&query, "DELETE FROM npc_types WHERE id='%i'", spawn->GetNPCTypeID()), errbuf,0)) {
				safe_delete(query);
				return false;
			}
			safe_delete_array(query);
			return true;
			break;
		}
		safe_delete_array(query);
		return false;
	}
with this
Code:
		case 2: { // update npc_type from target spawn - khuong
			LogFile->write(EQEMuLog::Debug,"before if name=%s\, level=%i, race=%i, class=%i, hp=%i, gender=%i, texture=%i, helmtexture=%i, size=%i, loottable_id=%i, merchant_id=%i, face=%i, WHERE id like %i", spawn->GetName(), spawn->GetLevel(), spawn->GetRace(), spawn->GetClass(), spawn->GetMaxHP(), spawn->GetGender(), spawn->GetTexture(), spawn->GetHelmTexture(), spawn->GetSize(), spawn->GetLoottableID(), spawn->MerchantType, spawn->GetNPCTypeID());
			if (RunQuery(query, MakeAnyLenString(&query, "UPDATE npc_types SET name = '%s', level = '%i', race = '%i', class = '%i', hp = '%i', gender = '%i', texture = '%i', helmtexture = '%i', size = '%i', loottable_id = '%i', merchant_id = '%i', face = '%i' WHERE id like '%i'", spawn->GetName(), spawn->GetLevel(), spawn->GetRace(), spawn->GetClass(), spawn->GetMaxHP(), spawn->GetGender(), spawn->GetTexture(), spawn->GetHelmTexture(), spawn->GetSize(), spawn->GetLoottableID(), spawn->MerchantType, spawn->GetNPCTypeID()), errbuf, 0)) {
                LogFile->write(EQEMuLog::Debug,"after if npc_types SET name=\"%s\", level=%i, race=%i, class=%i, hp=%i, gender=%i, texture=%i, helmtexture=%i, size=%i, loottable_id=%i, merchant_id=%i, face=%i, WHERE id like %i", spawn->GetName(), spawn->GetLevel(), spawn->GetRace(), spawn->GetClass(), spawn->GetMaxHP(), spawn->GetGender(), spawn->GetTexture(), spawn->GetHelmTexture(), spawn->GetSize(), spawn->GetLoottableID(), spawn->MerchantType, spawn->GetNPCTypeID());
				safe_delete_array(query);
				return true;
			}
			else {
				safe_delete_array(query);
				return false;
			}
			break;
		}
				
		case 3: { // delete spawn from spawning - khuong
			if (RunQuery(query, MakeAnyLenString(&query, "SELECT id,spawngroupID from spawn2 where zone like '%s' AND x like '%f' AND y like '%f' AND heading like '%f'", zone, spawn->GetSpawnX(),spawn->GetSpawnY(),spawn->GetSpawnHeading()), errbuf, &result)) {
			row = mysql_fetch_row(result);
			//LogFile->write(EQEMuLog::Debug,"Current zone %s,x= %f, Y= %f, Heading= %f",zone, spawn->GetSpawnX(),spawn->GetSpawnY(),spawn->GetSpawnHeading());
			if (row[0]) tmp = atoi(row[0]);
			if (row[1]) tmp2 = atoi(row[1]);
			query = 0;
			mysql_free_result(result);
			}
			else { return 0; }
			if (!RunQuery(query, MakeAnyLenString(&query, "DELETE FROM spawn2 WHERE id like '%i'", tmp), errbuf,0)) {
				safe_delete(query);
				return false;
			}
			if (!RunQuery(query, MakeAnyLenString(&query, "DELETE FROM spawngroup WHERE id like '%i'", tmp2), errbuf,0)) {
				safe_delete(query);
				return false;
			}
			if (!RunQuery(query, MakeAnyLenString(&query, "DELETE FROM spawnentry WHERE spawngroupID like '%i'", tmp2), errbuf,0)) {
				safe_delete(query);
				return false;
			}
			safe_delete_array(query);
			return true;


			break;
		}
		case 4: { //delete spawn from DB (including npc_type) - khuong
			if (RunQuery(query, MakeAnyLenString(&query, "SELECT id,spawngroupID from spawn2 where zone like '%s' AND x like '%f' AND y like '%f' AND heading like '%f'", zone, spawn->GetX(), spawn->GetY(), spawn->GetHeading()), errbuf, &result)) {
		//LogFile->write(EQEMuLog::Debug,"Current zone %s,x= %f, Y= %f, Heading= %f",zone, spawn->GetSpawnX(),spawn->GetSpawnY(),spawn->GetSpawnHeading());
			row = mysql_fetch_row(result);
			if (row[0]) tmp = atoi(row[0]);
			if (row[1]) tmp2 = atoi(row[1]);
			query = 0;
			mysql_free_result(result);
			}
			else { return 0; }
			if (!RunQuery(query, MakeAnyLenString(&query, "DELETE FROM spawn2 WHERE id like '%i'", tmp), errbuf,0)) {
				LogFile->write(EQEMuLog::Debug,"id = `%i`", tmp);
				safe_delete(query);
				return false;
			}
			if (!RunQuery(query, MakeAnyLenString(&query, "DELETE FROM spawngroup WHERE id like '%i'", tmp2), errbuf,0)) {
						LogFile->write(EQEMuLog::Debug,"id = `%i`", tmp2);
				safe_delete(query);
				return false;
			}
			if (!RunQuery(query, MakeAnyLenString(&query, "DELETE FROM spawnentry WHERE spawngroupID like '%i'", tmp2), errbuf,0)) {
						LogFile->write(EQEMuLog::Debug,"id = `%i`", tmp2);
				safe_delete(query);
				return false;
			}
			if (!RunQuery(query, MakeAnyLenString(&query, "DELETE FROM npc_types WHERE id like '%i'", spawn->GetNPCTypeID()), errbuf,0)) {
						LogFile->write(EQEMuLog::Debug,"id = `%i`", spawn->GetNPCTypeID());
				safe_delete(query);
				return false;
			}
			safe_delete_array(query);
			return true;
			break;
			
		}
		safe_delete_array(query);
		return false;
	}
for spawnfix in command.cpp search for command_spawnfix replace
Code:
if (!c->GetTarget() || !c->GetTarget()->IsNPC())
		c->Message(0, "Error: #spawnfix: Need an NPC target.");
	else {
		int32 tmp = 0;
		char errbuf[MYSQL_ERRMSG_SIZE];
		char *query = 0;
		MYSQL_RES *result;
		MYSQL_ROW row;
		if (database.RunQuery(query, MakeAnyLenString(&query, "SELECT id from spawn2 where zone='%s' AND x='%f' AND y='%f' AND heading='%f'", zone->GetShortName(), c->GetTarget()->GetX(), c->GetTarget()->GetY(), c->GetTarget()->GetHeading()), errbuf, &result)) {
with this
Code:
if (!c->GetTarget() || !c->GetTarget()->IsNPC())
		c->Message(0, "Error: #spawnfix: Need an NPC target.");
	else {
		int32 tmp = 0;
		char errbuf[MYSQL_ERRMSG_SIZE];
		char *query = 0;
		MYSQL_RES *result;
		MYSQL_ROW row;
		
		if (database.RunQuery(query, MakeAnyLenString(&query, "SELECT id FROM spawn2 WHERE  zone LIKE '%s' and x LIKE '%f' and  y LIKE '%f' and  heading LIKE '%f'", zone->GetShortName(), c->GetTarget()->GetX(), c->GetTarget()->GetY(), c->GetTarget()->GetHeading()), errbuf, &result)){
			//LogFile->write(EQEMuLog::Debug,"Current zone %s,x= %f, Y= %f, Heading= %f",zone->GetShortName(), c->GetTarget()->GetX(), c->GetTarget()->GetY(), c->GetTarget()->GetHeading());
Reply With Quote