Hallo zusammen!
Ich möchte mit dem Feuer Filterscript von Meta arbeiten und erstelltes Feuer löschbar machen.
Problem: Der Spieler fängt korrekt an zu brennen und verliert Leben, kann jedoch das Feuer nicht löschen.
Anbei der Code:
IsAtFlame(playerid)
{
for(new i; i < MAX_PLAYERS; i++)
{
if(Flame[i][Flame_Exists])
{
if(!IsPlayerInAnyVehicle(playerid) && (IsPlayerInRangeOfPoint(playerid, FLAME_ZONE, Flame[i][Flame_x], Flame[i][Flame_y], Flame[i][Flame_z]+Z_DIFFERENCE) ||
IsPlayerInRangeOfPoint(playerid, FLAME_ZONE, Flame[i][Flame_x], Flame[i][Flame_y], Flame[i][Flame_z]+Z_DIFFERENCE-1)))
{
return 1;
}
}
}
return 0;
}
Aiming_at_Flame(playerid)
{
new id = -1;
new Float:dis = 99999.99;
new Float:dis2;
new Float:px, Float:py, Float:pz;
new Float:cx,Float:cy,Float:cz,Float:ffx,Float:ffy,Float:ffz;
//GetPlayerCameraPos(playerid, cx, cy, cz);
//GetPlayerCameraFrontVector(playerid, fx, fy, fz);
for(new i; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i) && PlayerOnFire[i] && (IsInWaterCar(playerid) || HasExtinguisher(playerid) || GetPlayerWeapon(playerid) == 41) && PlayerOnFire[i])
{
GetPlayerPos(i, px, py, pz);
dis2 = DistanceCameraTargetToLocation(cx, cy, cz, px, py, pz, ffx, ffy, ffz);
if(dis2 < dis)
{
dis = dis2;
id = i;
}
}
}
if(id != -1) { return id-MAX_PLAYERS; }
for(new i; i < MAX_FLAMES; i++)
{
if(Flame[i][Flame_Exists])
{
if(IsInWaterCar(playerid) || HasExtinguisher(playerid) || GetPlayerWeapon(playerid) == 41)
{
dis2 = DistanceCameraTargetToLocation(cx, cy, cz, Flame[i][Flame_x], Flame[i][Flame_y], Flame[i][Flame_z]+Z_DIFFERENCE, ffx, ffy, ffz);
if(IsPlayerInAnyVehicle(playerid) && dis2 < CAR_RADIUS && dis2 < dis)
{
dis = dis2;
id = i;
}
else if(!IsPlayerInAnyVehicle(playerid) && dis2 < ONFOOT_RADIUS && dis2 < dis)
{
dis = dis2;
id = i;
}
}
}
}
if(id != -1)
{
if
(
(
IsPlayerInAnyVehicle(playerid) && !IsPlayerInRangeOfPoint(playerid, 50, Flame[id][Flame_x], Flame[id][Flame_y], Flame[id][Flame_z])
)
||
(
!IsPlayerInAnyVehicle(playerid) && !IsPlayerInRangeOfPoint(playerid, 5, Flame[id][Flame_x], Flame[id][Flame_y], Flame[id][Flame_z])
)
)
{ id = -1; }
}
return id;
}
public FireTimer(playerid, id)
{
printf("Firetimer aufgerufen!");
if(id < -1 && Aiming_at_Flame(playerid) == id) { StopPlayerBurning(id+MAX_PLAYERS); }
else if(id < -1 && Pissing_at_Flame(playerid) == id) { StopPlayerBurning(id+MAX_PLAYERS); }
else if(Flame[id][Flame_Exists] && ((Pressing(playerid) & KEY_FIRE && Aiming_at_Flame(playerid) == id) || (Pissing_at_Flame(playerid) == id)))
{
GivePlayerMoneyEx(playerid,50);
KillFire(id);
}
KillTimer(ExtTimer[playerid]);
ExtTimer[playerid] = 0;
}
public OnFireUpdate()
{
for(new playerid; playerid < MAX_PLAYERS; playerid++)
{
if(!IsPlayerConnected(playerid) || IsPlayerNPC(playerid)) { continue; }
if(PlayerOnFire[playerid] && !CanPlayerBurn(playerid, 1))
{ StopPlayerBurning(playerid); }
if(Pissing_at_Flame(playerid) != -1 || Aiming_at_Flame(playerid) != -1)
{
if(!ExtTimer[playerid] && ((Aiming_at_Flame(playerid) != -1 && Pressing(playerid) & KEY_FIRE) || Pissing_at_Flame(playerid) != -1))
{
new value, time, Float:x, Float:y, Float:z;
if(Pissing_at_Flame(playerid) != -1)
{
value = Pissing_at_Flame(playerid);
time = EXTINGUISH_TIME_PEEING;
}
else if(Aiming_at_Flame(playerid) != -1)
{
value = Aiming_at_Flame(playerid);
SetPVarInt(playerid,"Aiming_at_Flame",value);
printf("%i",GetPVarInt(playerid,"Aiming_at_Flame"));
if(GetPlayerWeapon(playerid) == 41)
{
CreateExplosion(Flame[value][Flame_x], Flame[value][Flame_y], Flame[value][Flame_z], 2, 5);
continue;
}
if(IsPlayerInAnyVehicle(playerid))
{
time = EXTINGUISH_TIME_VEHICLE;
}
else
{
time = EXTINGUISH_TIME_ONFOOT;
}
}
if(value < -1) { time = EXTINGUISH_TIME_PLAYER; }
time *= 1000;
if(value >= -1)
{
x = Flame[value][Flame_x];
y = Flame[value][Flame_y];
z = Flame[value][Flame_z];
DestroySmoke(value);
Flame[value][Smoke][0] = CreateObject(18727, x, y, z, 0.0, 0.0, 0.0);
Flame[value][Smoke][1] = CreateObject(18727, x+1, y, z, 0.0, 0.0, 0.0);
Flame[value][Smoke][2] = CreateObject(18727, x-1, y, z, 0.0, 0.0, 0.0);
Flame[value][Smoke][3] = CreateObject(18727, x, y+1, z, 0.0, 0.0, 0.0);
Flame[value][Smoke][4] = CreateObject(18727, x, y-1, z, 0.0, 0.0, 0.0);
SetTimerEx("DestroySmoke", time, 0, "d", value);
}
ExtTimer[playerid] = SetTimerEx("FireTimer", time, 0, "dd", playerid, value);
}
}
if(CanPlayerBurn(playerid) && IsAtFlame(playerid)) { SetPlayerBurn(playerid); }
#if defined BurnOthers
new Float:x, Float:y, Float:z;
for(new i; i < MAX_PLAYERS; i++)
{
if(playerid != i && IsPlayerConnected(i) && !IsPlayerNPC(i))
{
if(CanPlayerBurn(i) && PlayerOnFire[playerid] && !PlayerOnFire[i])
{
GetPlayerPos(i, x, y, z);
if(IsPlayerInRangeOfPoint(playerid, 1, x, y, z))
{
SetPlayerBurn(i);
}
}
}
}
#endif
}
return 1;
}
Über Hilfe wäre ich sehr dankbar.
Viele Grüße