// *************************************************************************** // Function: CMD_Where // Description: Our '/where' command // Displays the direction and distance to the closest spawn // Usage: /where <spawn> // *************************************************************************** int CMD_Where(int argc, char* argv[]) { if (argc<2) { WriteChatf("Syntax: %s <spawn>",argv[0]); return 0; } if (!ppSpawnManager) return 0; if (!pSpawnList) return 0; PSPAWNINFO pChar = GetCharInfo()->pSpawn; PSPAWNINFO pSpawnClosest = NULL; SEARCHSPAWN SearchSpawn; ClearSearchSpawn(&SearchSpawn); CHAR szMsg[MAX_STRING] = {0}; CHAR szName[MAX_STRING] = {0}; CHAR szArg[MAX_STRING] = {0}; bRunNextCommand = TRUE; SearchSpawn.SpawnType= PC; ParseSearchSpawn(1,argc,argv,SearchSpawn); if (!(pSpawnClosest = SearchThroughSpawns(&SearchSpawn,pChar))) { sprintf(szMsg, "There were no matches for: %s", FormatSearchSpawn(szArg, sizeof(szArg), &SearchSpawn)); } else { INT Angle = (INT)((atan2f(pChar->X - pSpawnClosest->X, pChar->Y - pSpawnClosest->Y) * 180.0f / PI + 360.0f) / 22.5f + 0.5f) % 16; sprintf(szMsg,"The closest '%s' is a level %d %s %s and %1.2f away to the %s, Z difference = %1.2f", CleanupName(strcpy(szName,pSpawnClosest->Name),FALSE), pSpawnClosest->Level, pEverQuest->GetRaceDesc(pSpawnClosest->mActorClient.Race), GetClassDesc(pSpawnClosest->mActorClient.Class), DistanceToSpawn(pChar,pSpawnClosest), szHeading[Angle], pSpawnClosest->Z-pChar->Z); DebugSpew("Where - %s",szMsg); } WriteChatColor(szMsg,USERCOLOR_WHO); return 0; }
int CMD_EQFace(int argc, char *argv[]) { //VOID Face(PSPAWNINFO pChar, PCHAR szLine) //{ if (!ppSpawnManager) return 0; if (!pSpawnList) return 0; PSPAWNINFO pSpawnClosest = NULL; PSPAWNINFO psTarget = NULL; SPAWNINFO LocSpawn = {0}; PSPAWNINFO pChar = (PSPAWNINFO)pLocalPlayer; SEARCHSPAWN SearchSpawn; ClearSearchSpawn(&SearchSpawn); CHAR szMsg[MAX_STRING] = {0}; CHAR szName[MAX_STRING] = {0}; CHAR szArg[MAX_STRING] = {0}; PCHAR pszArg = NULL; BOOL bArg = TRUE; BOOL bOtherArgs = FALSE; BOOL Away = FALSE; BOOL Predict = FALSE; BOOL Fast = FALSE; BOOL Look = TRUE; BOOL Parsing = TRUE; DOUBLE Distance; for(int qq=1; qq<argc; qq++) { if (!strcmp(argv[qq],"predict")) { Predict=TRUE; } else if (!strcmp(argv[qq],"fast")) { Fast = TRUE; } else if (!strcmp(argv[qq],"away")) { Away = TRUE; } else if (!strcmp(argv[qq],"nolook")) { Look = FALSE; } else if (!strnicmp(argv[qq], "loc", 3)) { pSpawnClosest = &LocSpawn; strcpy(LocSpawn.Name,"location"); if (((++qq)<argc) && strstr(argv[qq],",")) { pSpawnClosest->Y = (FLOAT)atof(argv[qq]); pszArg = strstr(argv[qq],",")+1; pSpawnClosest->X = (FLOAT)atof(pszArg); } } else if (!stricmp(argv[qq], "item")) { if (EnviroTarget.Name[0]==0) { printf("%s: item specified but no item targetted.", argv[0]); return 0; } pSpawnClosest = &EnviroTarget; } else if (!stricmp(argv[qq], "door")) { if (DoorEnviroTarget.Name[0] == 0) { printf("%s: door specified but no door targetted.", argv[0]); return 0; } pSpawnClosest = &DoorEnviroTarget; } else if (!strcmp(szArg,"help")) { printf("Usage: %s [spawn] [item] [door] [id #] [heading <ang>] [loc <y>,<x>] [away] [alert #]",argv[0]); return 0; } else { bOtherArgs = TRUE; qq+=ParseSearchSpawnArg(qq,argc,argv,SearchSpawn); // szFilter = ParseSearchSpawnArgs(szArg,szFilter,&SearchSpawn); } } if (!pSpawnClosest) { if (!bOtherArgs) { if (ppTarget && pTarget) { pSpawnClosest = (PSPAWNINFO)pTarget; } } else { pSpawnClosest = SearchThroughSpawns(&SearchSpawn,pChar); } } szMsg[0]=0; if (!pSpawnClosest) { printf("There were no matches for: %s",FormatSearchSpawn(szArg,&SearchSpawn)); } else { if (Predict) { Distance = DistanceToSpawn(pChar, pSpawnClosest); gFaceAngle = ( atan2((pSpawnClosest->X + (pSpawnClosest->SpeedX * Distance)) - pChar->X, (pSpawnClosest->Y + (pSpawnClosest->SpeedY * Distance)) - pChar->Y) * 256.0f / PI); } else { gFaceAngle = ( atan2(pSpawnClosest->X - pChar->X, pSpawnClosest->Y - pChar->Y) * 256.0f / PI); } if (Look) { Distance = DistanceToSpawn(pChar, pSpawnClosest); gLookAngle = ( atan2(pSpawnClosest->Z + pSpawnClosest->AvatarHeight*StateHeightMultiplier(pSpawnClosest->StandState) - pChar->Z - pChar->AvatarHeight*StateHeightMultiplier(pChar->StandState), (FLOAT)Distance) * 256.0f / PI); if (Away) gLookAngle = -gLookAngle; if (Fast) { pChar->CameraAngle = (FLOAT)gLookAngle; gLookAngle=10000.0f; } } if (Away) { gFaceAngle += 256.0f; } if (gFaceAngle>=512.0f) gFaceAngle -= 512.0f; if (gFaceAngle<0.0f) gFaceAngle += 512.0f; if (Fast) { ((PSPAWNINFO)pCharSpawn)->Heading = (FLOAT)gFaceAngle; gFaceAngle=10000.0f; } sprintf(szMsg,"Facing %s'%s'...",(Away)?"away from ":"", CleanupName(strcpy(szName,pSpawnClosest->Name),FALSE)); } if (ppTarget && pTarget) { psTarget = (PSPAWNINFO)pTarget; } if (szMsg[0] && ((pSpawnClosest != &LocSpawn) && ((Away) || (pSpawnClosest != psTarget)))) WriteChatColor(szMsg,USERCOLOR_WHO); DebugSpew("Face - %s",szMsg); return 0; }
int CMD_Target(int argc, char* argv[]) { if (!ppSpawnManager) return 0; if (!pSpawnList) return 0; if (argc<2) { WriteChatf("Syntax: %s myself|mycorpse|clear|<spawn search>",argv[0]); return 0; } PSPAWNINFO pChar = GetCharInfo()->pSpawn; PSPAWNINFO pSpawnClosest = NULL; SEARCHSPAWN SearchSpawn; ClearSearchSpawn(&SearchSpawn); CHAR szMsg[MAX_STRING] = {0}; BOOL DidTarget = FALSE; BOOL bArg = TRUE; bRunNextCommand = TRUE; for(int i=1;i<argc;i++) { if (!stricmp(argv[i],"myself")) { if (pChar) { pSpawnClosest = pChar; DidTarget = TRUE; } } else if (!stricmp(argv[i],"mycorpse")) { if (pChar) { SearchSpawn.SpawnType = CORPSE; strcpy(SearchSpawn.szName,pChar->Name); } } else if (!stricmp(argv[i],"clear")) { pTarget = NULL; DebugSpew("Target cleared."); WriteChatColor("Target cleared.",USERCOLOR_WHO); return 0; } else { i+= ParseSearchSpawnArg(i,argc,argv,SearchSpawn); } } if (pTarget) SearchSpawn.FromSpawnID = ((PSPAWNINFO)pTarget)->SpawnID; if (!DidTarget) { pSpawnClosest = SearchThroughSpawns(&SearchSpawn,pChar); } if (!pSpawnClosest) { CHAR szTemp[MAX_STRING] = {0}; sprintf(szMsg,"There are no spawns matching: %s",FormatSearchSpawn(szTemp,&SearchSpawn)); } else { PSPAWNINFO *psTarget = NULL; if (ppTarget) { psTarget = (PSPAWNINFO*)ppTarget; *psTarget = pSpawnClosest; DebugSpew("Target - %s selected",pSpawnClosest->Name); szMsg[0]=0; } else { sprintf(szMsg,"Unable to target, address = 0"); } } if (szMsg[0]) if (!gFilterTarget) WriteChatColor(szMsg,USERCOLOR_WHO); return 0; }