Hallo, liebe Brotfische,
new Float:TrashCans[][] =
{
{X, Y, Z, rX, rY, rZ},...
}
new TrashCans_ID[MAX_TRASH_CANS] = {-1,...};
new TrashCans_InteractionField[MAX_TRASH_CANS] = {-1,...};
Ich weise jedem Objekt eine Variable TrashCan_ID zu, weil jedes Objekt ein eigenes Interaktionsfenster, unabhängig von den anderen, hat.
Mit jedem erstellten Objekt gibt es ein passendes Interaktionsfeld TrashCans_InteractionField in Form eines DynamicCylinders
public OnGameModeInit()
{
for(new i = 0; i < MAX_TRASH_CANS; i++)
{
TrashCans_ID[i] = CreateDynamicObject(1345, TrashCans[i][0], TrashCans[i][1], TrashCans[i][2] , TrashCans[i][3], TrashCans[i][4], TrashCans[i][5], 0, -1);
TrashCans_InteractionField[i] = CreateDynamicCylinder(TrashCans[i][0], TrashCans[i][1], TrashCans[i][3], TrashCans[i][3]+3.0, 2.0, 0, 0, -1);
}
return 1;
}
Hier loope ich durch die maximale Anzahl an Objekten und erstelle die Objekte + deren Interaktionsradien (DynamicCylinder) an derselben Stelle, wo die Objekte erstellt werden. Die Daten werden also aus dem Array TrashCans[][] bezogen.
public OnPlayerEnterDynamicArea(playerid, areaid)
{
for(new i = 0; i < MAX_TRASH_CANS; i++)
{
if(areaid == TrashCans_InteractionField[i])
{
SendClientMessage(playerid, -1, "Press ALT to rummage through the trash.");
}
}
return 1;
}
public OnPlayerLeaveDynamicArea(playerid, areaid)
{
for(new i = 0; i < MAX_TRASH_CANS; i++)
{
if(areaid == TrashCans_InteractionField[i])
{
SendClientMessage(playerid, -1, "You're out of range.");
}
}
return 1;
}
Dieser Code ist provisorisch um zu sehen, ob das ganze denn auch funktioniert. Aber es wird mir nichts ausgegeben.