Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Mine...
- //command.cpp
- void command_gassign(Client *c, const Seperator *sep) {
- if (sep->IsNumber(1) && c->GetTarget() && c->GetTarget()->IsNPC() && c->GetTarget()->CastToNPC()->GetSpawnPointID() > 0) {
- int spawn2id = c->GetTarget()->CastToNPC()->GetSpawnPointID();
- database.AssignGrid(c, atoi(sep->arg[1]), spawn2id);
- }
- else
- c->Message(0,"Usage: #gassign [num] - must have an npc target!");
- }
- //Mine...
- //waypoints.cpp
- void ZoneDatabase::AssignGrid(Client *client, int grid, int spawn2id) {
- std::string query = StringFormat("UPDATE spawn2 SET pathgrid = %d WHERE id = %d", grid, spawn2id);
- auto results = QueryDatabase(query);
- if (!results.Success())
- {
- LogFile->write(EQEMuLog::Error, "Error updating spawn2 '%s': '%s'", query.c_str(), results.ErrorMessage().c_str());
- return;
- }
- if (results.RowsAffected() != 1) {
- client->Message(0, "ERROR: found spawn2 id %d but the update query failed", spawn2id);
- return;
- }
- if(client)
- client->LogSQL(query.c_str());
- client->Message(0, "Grid assign: spawn2 id = %d updated", spawn2id);
- }
- //Old..
- //command.cpp
- void command_gassign(Client *c, const Seperator *sep)
- {
- if (sep->IsNumber(1) && c->GetTarget() && c->GetTarget()->IsNPC())
- {
- database.AssignGrid(
- c,
- (c->GetTarget()->CastToNPC()->org_x),
- (c->GetTarget()->CastToNPC()->org_y),
- atoi(sep->arg[1])
- );
- }
- else
- c->Message(0,"Usage: #gassign [num] - must have an npc target!");
- }
- //Old...
- //waypoints.cpp
- void ZoneDatabase::AssignGrid(Client *client, float x, float y, uint32 grid)
- {
- int matches = 0, fuzzy = 0, spawn2id = 0;
- float dbx = 0, dby = 0;
- // looks like most of the stuff in spawn2 is straight integers
- // so let's try that first
- std::string query = StringFormat("SELECT id, x, y FROM spawn2 WHERE zone = '%s' AND x = %i AND y = %i",
- zone->GetShortName(), (int)x, (int)y);
- auto results = QueryDatabase(query);
- if(!results.Success()) {
- LogFile->write(EQEMuLog::Error, "Error querying spawn2 '%s': '%s'", query.c_str(), results.ErrorMessage().c_str());
- return;
- }
- // how much it's allowed to be off by
- #define _GASSIGN_TOLERANCE 1.0
- if (results.RowCount() == 0) // try a fuzzy match if that didn't find it
- {
- query = StringFormat("SELECT id,x,y FROM spawn2 WHERE zone='%s' AND "
- "ABS( ABS(x) - ABS(%f) ) < %f AND "
- "ABS( ABS(y) - ABS(%f) ) < %f",
- zone->GetShortName(), x, _GASSIGN_TOLERANCE, y, _GASSIGN_TOLERANCE);
- results = QueryDatabase(query);
- if (!results.Success()) {
- LogFile->write(EQEMuLog::Error, "Error querying fuzzy spawn2 '%s': '%s'", query.c_str(), results.ErrorMessage().c_str());
- return;
- }
- fuzzy = 1;
- matches = results.RowCount();
- }
- if (matches == 0)
- {
- client->Message(0, "ERROR: Unable to assign grid - can't find it in spawn2");
- return;
- }
- if(matches > 1)
- {
- client->Message(0, "ERROR: Unable to assign grid - multiple spawn2 rows match");
- return;
- }
- auto row = results.begin();
- spawn2id = atoi(row[0]);
- dbx = atof(row[1]);
- dby = atof(row[2]);
- query = StringFormat("UPDATE spawn2 SET pathgrid = %d WHERE id = %d", grid, spawn2id);
- results = QueryDatabase(query);
- if (!results.Success())
- {
- LogFile->write(EQEMuLog::Error, "Error updating spawn2 '%s': '%s'", query.c_str(), results.ErrorMessage().c_str());
- return;
- }
- if (results.RowsAffected() != 1)
- {
- client->Message(0, "ERROR: found spawn2 id %d but the update query failed", spawn2id);
- return;
- }
- if(client)
- client->LogSQL(query.c_str());
- if (!fuzzy)
- {
- client->Message(0, "Grid assign: spawn2 id = %d updated - exact match", spawn2id);
- return;
- }
- float difference = sqrtf(pow(fabs(x - dbx) , 2) + pow(fabs(y - dby), 2));
- client->Message(0, "Grid assign: spawn2 id = %d updated - fuzzy match: deviation %f", spawn2id, difference);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement