// *************************************************************************** // 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,&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->Race), GetClassDesc(pSpawnClosest->Class), DistanceToSpawn(pChar,pSpawnClosest), szHeading[Angle], pSpawnClosest->Z-pChar->Z); DebugSpew("Where - %s",szMsg); } WriteChatColor(szMsg,USERCOLOR_WHO); return 0; }
int CMD_MapShow(int argc, char *argv[]) { if (argc<2) { WriteChatf("Syntax: %s <spawnfilter>|reset",argv[0]); return 0; }; if (!stricmp(argv[1],"reset")) { MapClear(); MapGenerate(); WriteChatf("Map spawns regenerated"); return 0; } if (PCHARINFO pCharInfo=GetCharInfo()) { SEARCHSPAWN ssShow; ClearSearchSpawn(&ssShow); ParseSearchSpawn(1,argc,argv,ssShow); WriteChatf("%d previously hidden spawns shown",MapShow(ssShow)); } return 0; }
int CMD_MapHide(int argc, char *argv[]) { if (argc<2) { WriteChatf("Syntax: %s <spawnfilter>|reset",argv[0]); return 0; }; if (!stricmp(argv[1],"reset")) { MapClear(); MapGenerate(); WriteChatColor("Map spawns regenerated",USERCOLOR_DEFAULT); return 0; } if (PCHARINFO pCharInfo=GetCharInfo()) { SEARCHSPAWN ssHide; ClearSearchSpawn(&ssHide); ParseSearchSpawn(1,argc,argv,ssHide); WriteChatf("%d mapped spawns hidden",MapHide(ssHide)); } return 0; }
VOID MapFilterSetting( DWORD nMapFilter, int arg, int argc, char *argv[]) { CHAR szBuffer[MAX_STRING] = {0}; CHAR Buff[MAX_STRING]={0}; PCHAR szFilterMap[] = { "hide", "show", NULL }; PMAPFILTER pMapFilter=&MapFilterOptions[nMapFilter]; if (!RequirementsMet(nMapFilter)) { WriteChatf("'%s' requires '%s' option. Please enable this option first.",pMapFilter->szName,MapFilterOptions[pMapFilter->RequiresOption].szName); return; } if (arg>=argc) { // NO VALUE char szBuffer[2048]={0}; if (pMapFilter->bIsToggle) { sprintf(szBuffer,"%s: %s",pMapFilter->szName,szFilterMap[pMapFilter->Enabled]); } else if (nMapFilter == MAPFILTER_Custom) { if (IsOptionEnabled(nMapFilter)==0) { sprintf(szBuffer,"%s: Off",pMapFilter->szName); } else { sprintf(szBuffer,"%s: %s",pMapFilter->szName,FormatSearchSpawn(Buff,&MapFilterCustom)); } } else { sprintf(szBuffer,"%s: %d",pMapFilter->szName,pMapFilter->Enabled); } if (pMapFilter->DefaultColor != -1) { DWORD R,G,B; R= (pMapFilter->Color&0xFF0000)/0x10000; G= (pMapFilter->Color&0xFF00)/0x100; B= pMapFilter->Color&0xFF; WriteChatf("%s (Color: %d %d %d)",szBuffer,R,G,B); } else WriteChatf("%s",szBuffer); return; } if (pMapFilter->bIsToggle) { if (!stricmp(szFilterMap[0],argv[arg])) { pMapFilter->Enabled = 0; } else if (!stricmp(szFilterMap[1],argv[arg])) { pMapFilter->Enabled = 1; } else { pMapFilter->Enabled = 1 - pMapFilter->Enabled; } WriteChatf("%s is now set to: %s",pMapFilter->szName,szFilterMap[IsOptionEnabled(nMapFilter)]); } else if (nMapFilter == MAPFILTER_Custom) { ClearSearchSpawn(&MapFilterCustom); { pMapFilter->Enabled = 1; ParseSearchSpawn(arg+1,argc,argv,MapFilterCustom); WriteChatf("%s is now set to: %s",pMapFilter->szName,FormatSearchSpawn(Buff,&MapFilterCustom)); } } else { pMapFilter->Enabled = atoi(argv[arg]); WriteChatf("%s is now set to: %d",pMapFilter->szName,pMapFilter->Enabled); } itoa(pMapFilter->Enabled,szBuffer,10); pISInterface->SetSettingi("ISXEQMap.xml","Map Filters",pMapFilter->szName,pMapFilter->Enabled); pISInterface->SaveSettings("ISXEQMap.xml"); }
// *************************************************************************** // Function: MapFilters // Description: Our '/mapfilter' command // Sets map filters // Usage: /mapfilter [options|help] // *************************************************************************** VOID MapFilterSetting(PSPAWNINFO pChar, DWORD nMapFilter, PCHAR szValue) { CHAR szBuffer[MAX_STRING] = { 0 }; CHAR Buff[MAX_STRING] = { 0 }; DWORD dwValue = 0; PCHAR szFilterMap[] = { "hide", "show", NULL }; if (!pChar) return; PMAPFILTER pMapFilter = &MapFilterOptions[nMapFilter]; if (!RequirementsMet(nMapFilter)) { sprintf_s(szBuffer, "'%s' requires '%s' option. Please enable this option first.", pMapFilter->szName, MapFilterOptions[pMapFilter->RequiresOption].szName); WriteChatColor(szBuffer, USERCOLOR_DEFAULT); return; } if (!szValue) { if (pMapFilter->bIsToggle) { sprintf_s(szBuffer, "%s: %s", pMapFilter->szName, szFilterMap[pMapFilter->Enabled]); } else if (nMapFilter == MAPFILTER_Custom) { if (IsOptionEnabled(nMapFilter) == 0) { sprintf_s(szBuffer, "%s: Off", pMapFilter->szName); } else { sprintf_s(szBuffer, "%s: %s", pMapFilter->szName, FormatSearchSpawn(Buff, sizeof(Buff), &MapFilterCustom)); } } else { sprintf_s(szBuffer, "%s: %d", pMapFilter->szName, pMapFilter->Enabled); } if (pMapFilter->DefaultColor != -1) { CHAR szBuffer2[MAX_STRING] = { 0 }; DWORD R, G, B; R = (pMapFilter->Color & 0xFF0000) / 0x10000; G = (pMapFilter->Color & 0xFF00) / 0x100; B = pMapFilter->Color & 0xFF; sprintf_s(szBuffer2, "%s (Color: %d %d %d)", szBuffer, R, G, B); strcpy_s(szBuffer, szBuffer2); } } else { if (pMapFilter->bIsToggle) { if (!_stricmp(szFilterMap[0], szValue)) { pMapFilter->Enabled = 0; } else if (!_stricmp(szFilterMap[1], szValue)) { pMapFilter->Enabled = 1; } else { pMapFilter->Enabled = 1 - pMapFilter->Enabled; } sprintf_s(szBuffer, "%s is now set to: %s", pMapFilter->szName, szFilterMap[IsOptionEnabled(nMapFilter)]); } else if (nMapFilter == MAPFILTER_Custom) { ClearSearchSpawn(&MapFilterCustom); if (szValue[0] == 0) { pMapFilter->Enabled = 0; sprintf_s(szBuffer, "%s is now set to: Off", pMapFilter->szName); } else { pMapFilter->Enabled = 1; ParseSearchSpawn(szValue, &MapFilterCustom); sprintf_s(szBuffer, "%s is now set to: %s", pMapFilter->szName, FormatSearchSpawn(Buff, sizeof(Buff), &MapFilterCustom)); } } else if (nMapFilter == MAPFILTER_Marker) { CHAR szBuffer2[MAX_STRING] = { 0 }; GetArg(szBuffer2, szValue, 1); if (!_stricmp(szFilterMap[0], szValue)) { pMapFilter->Enabled = 0; sprintf_s(szBuffer, "%s is now set to: %s", pMapFilter->szName, szFilterMap[IsOptionEnabled(nMapFilter)]); } else if (!_stricmp(szFilterMap[1], szValue)) { pMapFilter->Enabled = 1; sprintf_s(szBuffer, "%s is now set to: %s", pMapFilter->szName, szFilterMap[IsOptionEnabled(nMapFilter)]); } else { pMapFilter->Enabled = 1; sprintf_s(szBuffer, "%s %s", pMapFilter->szName, FormatMarker(szValue, Buff, sizeof(Buff))); } } else { pMapFilter->Enabled = atoi(szValue); sprintf_s(szBuffer, "%s is now set to: %d", pMapFilter->szName, pMapFilter->Enabled); } } WriteChatColor(szBuffer, USERCOLOR_DEFAULT); if (szValue) { _itoa_s(pMapFilter->Enabled, szBuffer, 10); WritePrivateProfileString("Map Filters", pMapFilter->szName, szBuffer, INIFileName); } }
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; }
int CMD_Who(int argc, char *argv[]) { if (!cmdWho) { PCMDLIST pCmdListOrig = (PCMDLIST)EQADDR_CMDLIST; for (int i=0;pCmdListOrig[i].fAddress != 0;i++) { if (!strcmp(pCmdListOrig[i].szName,"/who")) { cmdWho = (fEQCommand)pCmdListOrig[i].fAddress; } } } if (!cmdWho) return -1; for (int i = 1 ; i < argc ; i++) { if (!stricmp(argv[i],"all")) { CHAR szRest[MAX_STRING] = {0}; pISInterface->GetArgs(1,argc,argv,szRest,sizeof(szRest)); cmdWho((PSPAWNINFO)pLocalPlayer, szRest); return 0; } } bool bConColor=false; SEARCHSPAWN SearchSpawn; ClearSearchSpawn(&SearchSpawn); SearchSpawn.SpawnType = PC; for (int i = 1 ; i < argc ; i++) { if (!stricmp(argv[i],"sort")) { // <name|level|distance|race|class|guild|id> PCHAR szSortBy[] = { "level", // Default sort by "name", "race", "class", "distance", "guild", "id", NULL }; DWORD Command=0; for (Command;szSortBy[Command];Command++) { if (!stricmp(argv[i],szSortBy[Command])) { SearchSpawn.SortBy = Command; if (i<argc) i++; break; } } } else if (!stricmp(argv[i],"concolor")) { bConColor=1; } else { i+=ParseSearchSpawnArg(i,argc,argv,SearchSpawn); } } SuperWhoDisplay((PSPAWNINFO)pLocalPlayer,&SearchSpawn,bConColor); return 0; }