Advertisement
NatedogServer

Untitled

Nov 26th, 2014
200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.68 KB | None | 0 0
  1. //Mine...
  2. //command.cpp
  3. void command_gassign(Client *c, const Seperator *sep) {
  4.     if (sep->IsNumber(1) && c->GetTarget() && c->GetTarget()->IsNPC() && c->GetTarget()->CastToNPC()->GetSpawnPointID() > 0) {
  5.         int spawn2id =  c->GetTarget()->CastToNPC()->GetSpawnPointID();
  6.         database.AssignGrid(c, atoi(sep->arg[1]), spawn2id);
  7.     }
  8.     else
  9.         c->Message(0,"Usage: #gassign [num] - must have an npc target!");
  10. }
  11.  
  12. //Mine...
  13. //waypoints.cpp
  14. void ZoneDatabase::AssignGrid(Client *client, int grid, int spawn2id) {
  15.     std::string query = StringFormat("UPDATE spawn2 SET pathgrid = %d WHERE id = %d", grid, spawn2id);
  16.     auto results = QueryDatabase(query);
  17.     if (!results.Success())
  18.     {
  19.         LogFile->write(EQEMuLog::Error, "Error updating spawn2 '%s': '%s'", query.c_str(), results.ErrorMessage().c_str());
  20.         return;
  21.     }
  22.     if (results.RowsAffected() != 1) {
  23.         client->Message(0, "ERROR: found spawn2 id %d but the update query failed", spawn2id);
  24.         return;
  25.     }
  26.     if(client)
  27.         client->LogSQL(query.c_str());
  28.  
  29.     client->Message(0, "Grid assign: spawn2 id = %d updated", spawn2id);
  30. }
  31.  
  32. //Old..
  33. //command.cpp
  34. void command_gassign(Client *c, const Seperator *sep)
  35. {
  36. if (sep->IsNumber(1) && c->GetTarget() && c->GetTarget()->IsNPC())
  37. {
  38. database.AssignGrid(
  39. c,
  40. (c->GetTarget()->CastToNPC()->org_x),
  41. (c->GetTarget()->CastToNPC()->org_y),
  42. atoi(sep->arg[1])
  43. );
  44. }
  45. else
  46. c->Message(0,"Usage: #gassign [num] - must have an npc target!");
  47. }
  48.  
  49. //Old...
  50. //waypoints.cpp
  51. void ZoneDatabase::AssignGrid(Client *client, float x, float y, uint32 grid)
  52. {
  53. int matches = 0, fuzzy = 0, spawn2id = 0;
  54. float dbx = 0, dby = 0;
  55. // looks like most of the stuff in spawn2 is straight integers
  56. // so let's try that first
  57. std::string query = StringFormat("SELECT id, x, y FROM spawn2 WHERE zone = '%s' AND x = %i AND y = %i",
  58. zone->GetShortName(), (int)x, (int)y);
  59. auto results = QueryDatabase(query);
  60. if(!results.Success()) {
  61. LogFile->write(EQEMuLog::Error, "Error querying spawn2 '%s': '%s'", query.c_str(), results.ErrorMessage().c_str());
  62. return;
  63. }
  64. // how much it's allowed to be off by
  65. #define _GASSIGN_TOLERANCE  1.0
  66. if (results.RowCount() == 0) // try a fuzzy match if that didn't find it
  67. {
  68. query = StringFormat("SELECT id,x,y FROM spawn2 WHERE zone='%s' AND "
  69. "ABS( ABS(x) - ABS(%f) ) < %f AND "
  70. "ABS( ABS(y) - ABS(%f) ) < %f",
  71. zone->GetShortName(), x, _GASSIGN_TOLERANCE, y, _GASSIGN_TOLERANCE);
  72. results = QueryDatabase(query);
  73. if (!results.Success()) {
  74. LogFile->write(EQEMuLog::Error, "Error querying fuzzy spawn2 '%s': '%s'", query.c_str(), results.ErrorMessage().c_str());
  75. return;
  76. }
  77. fuzzy = 1;
  78. matches = results.RowCount();
  79. }
  80. if (matches == 0)
  81. {
  82. client->Message(0, "ERROR: Unable to assign grid - can't find it in spawn2");
  83. return;
  84. }
  85. if(matches > 1)
  86. {
  87. client->Message(0, "ERROR: Unable to assign grid - multiple spawn2 rows match");
  88. return;
  89. }
  90. auto row = results.begin();
  91. spawn2id = atoi(row[0]);
  92. dbx = atof(row[1]);
  93. dby = atof(row[2]);
  94. query = StringFormat("UPDATE spawn2 SET pathgrid = %d WHERE id = %d", grid, spawn2id);
  95. results = QueryDatabase(query);
  96. if (!results.Success())
  97. {
  98. LogFile->write(EQEMuLog::Error, "Error updating spawn2 '%s': '%s'", query.c_str(), results.ErrorMessage().c_str());
  99. return;
  100. }
  101. if (results.RowsAffected() != 1)
  102. {
  103. client->Message(0, "ERROR: found spawn2 id %d but the update query failed", spawn2id);
  104. return;
  105. }
  106. if(client)
  107. client->LogSQL(query.c_str());
  108. if (!fuzzy)
  109. {
  110. client->Message(0, "Grid assign: spawn2 id = %d updated - exact match", spawn2id);
  111. return;
  112. }
  113. float difference = sqrtf(pow(fabs(x - dbx) , 2) + pow(fabs(y - dby), 2));
  114. client->Message(0, "Grid assign: spawn2 id = %d updated - fuzzy match: deviation %f", spawn2id, difference);
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement