ItemTarget and GroundItem:Grab
Posted: Mon Aug 21, 2006 7:05 pm
FWIW,
ISXEQCommands.cpp
ISXEQCommandList.h
ISXEQDataTypes.cpp
MQ2DataTypes.h
Caveat: If you ask "where do I paste this", I will reach thru teh intarweb and choke the living shit out of you.
ISXEQCommands.cpp
Code: Select all
int CMD_ItemTarget(int argc, char *argv[])
{
if (!ppItemList) return 0;
if (!pItemList) return 0;
PSPAWNINFO pChar = (PSPAWNINFO)pLocalPlayer;
PGROUNDITEM pItem = (PGROUNDITEM)pItemList;
FLOAT cDistance = 100000.0f;
CHAR szName[MAX_STRING]={0};
CHAR szBuffer[MAX_STRING] = {0};
ZeroMemory(&EnviroTarget,sizeof(EnviroTarget));
pGroundTarget = NULL;
while (pItem) {
GetFriendlyNameForGroundItem(pItem,szName);
if (
(
(argc<2) ||
(!strnicmp(szName,argv[1],strlen(argv[1])))
) && (
(gZFilter >=10000.0f) ||
(
(pItem->Z <= pChar->Z + gZFilter) &&
(pItem->Z >= pChar->Z - gZFilter)
)
)
) {
SPAWNINFO tSpawn;
ZeroMemory(&tSpawn,sizeof(tSpawn));
strcpy(tSpawn.Name,szName);
tSpawn.Y=pItem->Y;
tSpawn.X=pItem->X;
tSpawn.Z=pItem->Z;
tSpawn.Type = SPAWN_NPC;
tSpawn.HPCurrent = 1;
tSpawn.HPMax = 1;
tSpawn.Heading=pItem->Heading;
tSpawn.Race = pItem->DropID;
FLOAT Distance = DistanceToSpawn(pChar,&tSpawn);
if (Distance<cDistance) {
CopyMemory(&EnviroTarget,&tSpawn,sizeof(EnviroTarget));
cDistance=Distance;
pGroundTarget = pItem;
}
}
pItem = pItem->pNext;
}
if (EnviroTarget.Name[0]!=0) {
sprintf(szBuffer,"Item '%s' targeted.",EnviroTarget.Name);
WriteChatColor(szBuffer,USERCOLOR_DEFAULT);
}
return 0;
}
Code: Select all
COMMAND("itemtarget",CMD_ItemTarget,true,false);
Code: Select all
bool MQ2GroundType::GETMETHOD()
{
#define pPtr ((PGROUNDITEM)VarPtr.Ptr)
if (!VarPtr.Ptr)
return false;
PMQ2TYPEMETHOD pMethod=MQ2GroundType::FindMethod(Method);
if (!pMethod)
{
return false;
}
// TODO
switch((GroundMethods)pMethod->ID)
{
case Grab:
if (EnviroTarget.Name[0]!=0 && DistanceToSpawn((PSPAWNINFO)pCharSpawn,&EnviroTarget)<20.0f )
{
INTERACTGROUNDITEM Data;
Data.SpawnID = GetCharInfo()->pSpawn->SpawnID;
Data.DropID = EnviroTarget.Race;
SendEQMessage(EQ_INTERACTGROUNDITEM,&Data,sizeof(INTERACTGROUNDITEM));
EnviroTarget.Name[0]=0;
return true;
}
return false;
}
return false;
#undef pPtr
}
Code: Select all
static enum GroundMethods
{
Grab=1,
};
MQ2GroundType():MQ2Type("ground")
{
TypeMember(ID);//1,
TypeMember(Distance);//2,
TypeMember(X);//3,
TypeMember(Y);//4,
TypeMember(Z);//5,
TypeMember(Heading);//6,
TypeMember(Name);//7,
TypeMember(HeadingTo);
AddMember(xLineOfSight,"LineOfSight");
TypeMethod(Grab);
}
~MQ2GroundType()
{
}