Hey Leute,
ich war mal auf einem Server, wo man Leben verloren hat, sobald man in dem Rauch/Gas der Rauch/Gasgranate stand (ID: 17).
Ich möchte wissen, ob ihr wisst wie die Abfrage, bzw. das ganze scripttechnisch aussehen würde?
Gruß
DCF
Hey Leute,
ich war mal auf einem Server, wo man Leben verloren hat, sobald man in dem Rauch/Gas der Rauch/Gasgranate stand (ID: 17).
Ich möchte wissen, ob ihr wisst wie die Abfrage, bzw. das ganze scripttechnisch aussehen würde?
Gruß
DCF
timer->IsPlayerInRangOfPoint->GetPlayerHealth->SetPlayerHealth
timer->IsPlayerInRangOfPoint->GetPlayerHealth->SetPlayerHealth
Mir ist schon bewusst, wie ich das dann letztendlich mache, die Frage die ich im Thread stelle ist jedoch, wie die Abfrage lautet, ob man in diesem Rauch (der Rauchgranate) steht, oder nicht...
wie die Abfrage lautet, ob man in diesem Rauch (der Rauchgranate) steht, oder nicht...
Dafür gibt es keine Funktion und das kannst du auch nicht 100%ig ermitteln.
Nutze, wie schon erwähnt einfach IsPlayerInRangeOfPoint
mfg.
Ich hoffe ich erzähle hier jetzt nicht totalen Mist, aber müsste man nicht, um die Position der Rauchgranate herauszufinden (wo sie hingeworfen wurde), den Punkt
speichern, zu dem der Spieler beim werfen der Granate guckt und dementsprechend die Koordinaten des Punktes in den Timer einbauen (IsPlayerInRangeOfPoint(playerid, 5.0, rauchgranate_x, rauchgranate_y, rauchgranate_z))?
/edit:
Zumindest ist das die einzige/beste Methode, die mir gerade einfällt
Ist aber viel arbeit
Genau so habe ich mir das vorgestellt Icy Ist anscheinend doch nicht sooo viel Arbeit
Bleibt nurnoch das Problem, falls ein Spieler die Granate über Gegenstände wirft, bzw beim Werfen in die Luft guckt
zu dem der Spieler beim werfen der Granate guckt und dementsprechend die Koordinaten des Punktes in den Timer einbauen
Genau so muss man es machen, hier ein Beispiel:
const Float:distance = 5.0; //Wie weit er die Granate wirft..
new Float:x,Float:y,Float:z,Float:a;
GetPlayerPos(playerid, x, y, z),GetPlayerFacingAngle(playerid, a);
x += (distance * floatsin(-a, degrees));
y += (distance * floatcos(-a, degrees));
//x,y und z an den Timer übergeben
//Dann in dem Timer:
for(new i,Float:heal; i<MAX_PLAYERS; i++)
{
if(IsPlayerInRangeOfPoint(i,7.5,x,y,z)) GetPlayerHealth(i,heal),SetPlayerHealth(i,heal-2.0);
}
mfg.
ICy.: bei deinem würde er aber nur 1mal Leben verlieren, dafür muss dann die Posi und eine Var für die Time global erstellt werden.
bei OnPlayerWeaponShot hat man das Problem, dass es nicht bei jeder Waffe aufgerufen würd.
Das ist mir auch gerade aufgefallen als ich das getestet habe
Schade eigentlich, dass das nicht bei jeder Waffe aufgerufen wird.
Schade eigentlich, dass das nicht bei jeder Waffe aufgerufen wird.
Man kann sich einen Callback ganz simpel basteln, der das checkt:
forward WeaponCalled(playerid, weaponid);
//unter OnPlayerKeyStateChange
if(newkeys & KEY_FIRE && GetPlayerWeapon(playerid) != 0) WeaponCalled(playerid, GetPlayerWeapon(playerid));
//Dann weiter unten im Skript
public WeaponCalled(playerid, weaponid)
{
if(weaponid == 16)
{
//Hier hat der Spieler eine Granate geworfen
}
return 1;
}
mfg.