jd255 |
08-01-2004 12:58 PM |
#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());
|