was genau muss man in ein script hinein packen um nachdem man gestorben ist, ein paar minuten liegen zu bleiben und dann erst respawnen?
mfg Kenji
was genau muss man in ein script hinein packen um nachdem man gestorben ist, ein paar minuten liegen zu bleiben und dann erst respawnen?
mfg Kenji
npc mit anim connecten und spectaten, per timer dann rkick und resetcam
bezüglich script meinte ich das
hm.. noch nie ausprobiert so weit glaub cih das es über nen timer und resetcam geht
Hmmmm.. Eine Idee wäre doch:
Man stirbt. Position wird gespeichert. Man spawnt. gespeicherte Position wird geladen, man wird gefreezt, bekommt eine Animation, dass man auf dem Boden liegt, und einen Timer, der einen in ein paar Minuten entfreezt und respawnt.
#include <a_samp>
#define FILTERSCRIPT
new Dead[MAX_PLAYERS], Float:DX[MAX_PLAYERS], Float:DY[MAX_PLAYERS],Float:DZ[MAX_PLAYERS],Float:DA[MAX_PLAYERS],DTimer[MAX_PLAYERS];
public OnPlayerConnect(playerid)
{
Dead[playerid] = 0;
return 1;
}
public OnPlayerDeath(playerid,killerid,reason)
{
Dead[playerid] = 1;
GetPlayerPos(playerid,DX[playerid],DY[playerid],DZ[playerid]);
GetPlayerFacingAngle(playerid,DA[playerid]);
DTimer[playerid] = SetTimerEx("DSpawn", 180*1000, 0, "i",playerid);
return 1;
}
public OnPlayerDisconnect(playerid,reason)
{
Dead[playerid] = 0;
return 1;
}
public OnPlayerSpawn(playerid)
{
if(Dead[playerid] == 1)
{
SetTimerEx("DSpawned", 100, 0, "i",playerid);
}
return 1;
}
forward DSpawn(playerid);
public DSpawn(playerid)
{
if(Dead[playerid] == 1)
{
Dead[playerid] = 0;
TogglePlayerControllable(playerid,1);
ClearAnimations(playerid);
SpawnPlayer(playerid);
SetPlayerHealth(playerid,100);
SetCameraBehindPlayer(playerid);
}
}
forward DSpawned(playerid);
public DSpawned(playerid)
{
if(Dead[playerid] == 1)
{
SetPlayerPos(playerid,DX[playerid],DY[playerid],DZ[playerid]);
SetPlayerHealth(playerid,1); // Soll so aussehen, als ob man 0 Leben hätte^^
SetPlayerCameraPos(playerid,DX[playerid],DY[playerid],DZ[playerid]+3);
ResetPlayerWeapons(playerid);
SetPlayerCameraLookAt(playerid,DX[playerid],DY[playerid],DZ[playerid]);
SetPlayerFacingAngle(playerid,DA[playerid]);
TogglePlayerControllable(playerid,0);
ApplyAnimation(playerid,"PARACHUTE","FALL_skyDive_DIE",4.1,0,1,1,1,1);
}
}
Getestet! Funktioniert perfekt.
wäre eine Idee es wird leichter gemacht
wenn man
unter OnPlayerDeath die position speichert und dann eben dort wieder spawnt so wäre der Verlauf aber naja setzt es ruhig in die Tat um mann kann auch einfachmal
spawnen lassen aber eben schwarzen Desk und freezen
stimmt haar genau
jedoch brauchst du die position nicht speichern weil ich weniger glaub wen er tot ist das er relogged macht?!
also würd ich einfach nur bei OnPlayerDeath ein Freeze rein machen und über einen Timer dan den Spieler entfreezen
Wenn er stirbt, respawnt er sofort da sein Leben auf 0 ist.
Man könnte die Position einfach in eine Variable speichern oder mit einem Dateisystem um die einzelnen Sekunden der 3 Minuten zu speichern damit er nicht einfach reloggen kann.
danke, das klingt alles gut, kann man es jetzt auch noch so erweitern das wenn jetzt jemand dich zb heilt nehmen wir an ein medic oder ein admin, das du dann gleich wieder aufstehen kannst, oder geht das schon in das unmögliche?
Nein, ist sehr leicht. Wenn du willst das Medic das machst, kannst du einfach halt mit GetPlayerHealth(giveplayerid,tempheal); es abfragen & mit SetPlayerHealth(); sein Leben wieder zurück geben.
P.S: Einfach /heal für Medic machen, SetPlayerHealth(); einfügen
das für medic hab ich drinnen und das für admins hab ich auch drinnen
nur wie genau sollte das jetzt im script ausschauen? und das man es vlt für die medics gleich rot makiert wo die person ist, das sie hinfahren können
Wenn du willst das es für die Beamten gezeigt wirst, musst du einfach halt SetPlayerCheckpoint(); es machen, genauerer würde es so aussehen:
SetPlayerCheckpoint(i,PlayerInfo[playerid][pTx],PlayerInfo[playerid][pTy],PlayerInfo[playerid][pTz],5.0);
okay gut und das ganze sollte jetzt wie genau aussehen?
unter OnPlayerDeath
SetPlayerCheckpoint(i,PlayerInfo[playerid][pTx],PlayerInfo[playerid][pTy],PlayerInfo[playerid][pTz],5.0);
rest von heal hast ja drin
dan unter OnPlayerDeath
GetPlayerControlabel(playerid,0);//oda heißt so änlich xD find ich grad nich in wiki
dan machste ne überprüfung unter OnPlayerDeath
und zwar so
if(tmpheal >=1)
{
GetPlayerControlabel(playerid,1);
SetPlayerPos(playerid,PlayerInfo[playerid][pTx],PlayerInfo[playerid][pTy],PlayerInfo[playerid][pTz]);
return 1;
}
sollte funktionieren bin mir aba ned sicher ist ^1. nicht getestet 2. bin ich grad zu müde zum proggen
/heilen ID ... funktioniert nur wenn der Spieler "tot" ist und man in der Nähe vom jeweiligen Spieler ist. (funktioniert nur im Zusammenhang mit dem Script, welches ich davor gepostet habe)
strtok(const string[], &index)
{
new length = strlen(string);
while ((index < length) && (string[index] <= ' '))
{
index++;
}
new offset = index;
new result[20];
while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
{
result[index - offset] = string[index];
index++;
}
result[index - offset] = EOS;
return result;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/kill", cmdtext, true, 10) == 0) //Zum Testen
{
SetPlayerHealth(playerid,0);
return 1;
}
new cmd[30];
new idx;
cmd = strtok(cmdtext, idx);
if(strcmp(cmd, "/heilen", true) == 0)
{
new tmp[30];
tmp = strtok(cmdtext, idx);
new otherplayer = strval(tmp);
new Float:X,Float:Y,Float:Z;
GetPlayerPos(otherplayer,X,Y,Z);
if(IsPlayerConnected(otherplayer) == 1 && Dead[otherplayer] == 1 && IsPlayerInRangeOfPoint(playerid, 2.0, X, Y, Z) && playerid != otherplayer)
{
Dead[otherplayer] = 0;
TogglePlayerControllable(otherplayer,1);
KillTimer(DTimer[otherplayer]);
SetPlayerHealth(otherplayer,50);
SetCameraBehindPlayer(otherplayer);
ApplyAnimation(playerid,"ped","getup",2.5,0,1,1,0,1);
new Heilername[MAX_PLAYER_NAME];
new Opfername[MAX_PLAYER_NAME];
new string[128];
GetPlayerName(otherplayer, Opfername, sizeof(Opfername));
format(string, sizeof(string), "Du hast %s (ID:%d) wiederbelebt.",Opfername,otherplayer);
SendClientMessage(playerid,0xFFFF00AA, string);
new stringz[128];
GetPlayerName(playerid, Heilername, sizeof(Heilername));
format(stringz, sizeof(stringz), "Du wurdest von %s (ID:%d) wiederbelebt.",Heilername,playerid);
SendClientMessage(otherplayer,0xFFFF00AA, stringz);
}
return 1;
}
return 0;
}
Eventuell noch: Wenn man tot ist, kann man nicht den Chat benutzen^^
public OnPlayerText(playerid, text[])
{
if(Dead[playerid] == 1)
{
SendClientMessage(playerid,0xFFFF00AA,"Tote können nicht reden.");
return 0;
}
return 1;
}
Wie? Er hat zusätzlich noch gefragt, ob das geht mit /heilen ID ... und ja, es geht. Ich versuch ja nur anderen zu helfen oO
Danke das hilft sehr echt super von dir [GFSVB]RedDragon
das kann ich ganz als ein filterscript zusammen setzen? oder?
Jo beides in das selbe Script packen, dann sollte alles gehen
danke
danke jedoch bekomme ich dann folgenden fehler
D:\GTA SA MP\filterscripts\death.pwn(124) : warning 217: loose indentation
#include <a_samp>
#define FILTERSCRIPT
new Dead[MAX_PLAYERS], Float:DX[MAX_PLAYERS], Float:DY[MAX_PLAYERS],Float:DZ[MAX_PLAYERS],Float:DA[MAX_PLAYERS],DTimer[MAX_PLAYERS];
public OnPlayerConnect(playerid)
{
Dead[playerid] = 0;
return 1;
}
public OnPlayerDeath(playerid,killerid,reason)
{
Dead[playerid] = 1;
GetPlayerPos(playerid,DX[playerid],DY[playerid],DZ[playerid]);
GetPlayerFacingAngle(playerid,DA[playerid]);
DTimer[playerid] = SetTimerEx("DSpawn", 180*1000, 0, "i",playerid);
return 1;
}
public OnPlayerDisconnect(playerid,reason)
{
Dead[playerid] = 0;
return 1;
}
public OnPlayerSpawn(playerid)
{
if(Dead[playerid] == 1)
{
SetTimerEx("DSpawned", 100, 0, "i",playerid);
}
return 1;
}
forward DSpawn(playerid);
public DSpawn(playerid)
{
if(Dead[playerid] == 1)
{
Dead[playerid] = 0;
TogglePlayerControllable(playerid,1);
ClearAnimations(playerid);
SpawnPlayer(playerid);
SetPlayerHealth(playerid,100);
SetCameraBehindPlayer(playerid);
}
}
forward DSpawned(playerid);
public DSpawned(playerid)
{
if(Dead[playerid] == 1)
{
SetPlayerPos(playerid,DX[playerid],DY[playerid],DZ[playerid]);
SetPlayerHealth(playerid,1); // Soll so aussehen, als ob man 0 Leben hätte^^
SetPlayerCameraPos(playerid,DX[playerid],DY[playerid],DZ[playerid]+3);
ResetPlayerWeapons(playerid);
SetPlayerCameraLookAt(playerid,DX[playerid],DY[playerid],DZ[playerid]);
SetPlayerFacingAngle(playerid,DA[playerid]);
TogglePlayerControllable(playerid,0);
ApplyAnimation(playerid,"PARACHUTE","FALL_skyDive_DIE",4.1,0,1,1,1,1);
}
}
strtok(const string[], &index)
{
new length = strlen(string);
while ((index < length) && (string[index] <= ' '))
{
index++;
}
new offset = index;
new result[20];
while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
{
result[index - offset] = string[index];
index++;
}
result[index - offset] = EOS;
return result;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/kill", cmdtext, true, 10) == 0) //Zum Testen
{
SetPlayerHealth(playerid,0);
return 1;
}
new cmd[30];
new idx;
cmd = strtok(cmdtext, idx);
if(strcmp(cmd, "/heilen", true) == 0)
{
new tmp[30];
tmp = strtok(cmdtext, idx);
new otherplayer = strval(tmp);
new Float:X,Float:Y,Float:Z;
GetPlayerPos(otherplayer,X,Y,Z);
if(IsPlayerConnected(otherplayer) == 1 && Dead[otherplayer] == 1 && IsPlayerInRangeOfPoint(playerid, 2.0, X, Y, Z) && playerid != otherplayer)
{
Dead[otherplayer] = 0;
TogglePlayerControllable(otherplayer,1);
KillTimer(DTimer[otherplayer]);
SetPlayerHealth(otherplayer,50);
SetCameraBehindPlayer(otherplayer);
ApplyAnimation(playerid,"ped","getup",2.5,0,1,1,0,1);
new Heilername[MAX_PLAYER_NAME];
new Opfername[MAX_PLAYER_NAME];
new string[128];
GetPlayerName(otherplayer, Opfername, sizeof(Opfername));
format(string, sizeof(string), "Du hast %s (ID:%d) wiederbelebt.",Opfername,otherplayer);
SendClientMessage(playerid,0xFFFF00AA, string);
new stringz[128];
GetPlayerName(playerid, Heilername, sizeof(Heilername));
format(stringz, sizeof(stringz), "Du wurdest von %s (ID:%d) wiederbelebt.",Heilername,playerid);
SendClientMessage(otherplayer,0xFFFF00AA, stringz);
}
return 1;
}
return 0;
}
public OnPlayerText(playerid, text[])
{
if(Dead[playerid] == 1)
{
SendClientMessage(playerid,0xFFFF00AA,"Tote können nicht reden.");
return 0;
}
return 1;
}
#include <a_samp>
#define FILTERSCRIPT
new Dead[MAX_PLAYERS], Float:DX[MAX_PLAYERS], Float:DY[MAX_PLAYERS],Float:DZ[MAX_PLAYERS],Float:DA[MAX_PLAYERS],DTimer[MAX_PLAYERS];
public OnPlayerConnect(playerid)
{
Dead[playerid] = 0;
return 1;
}
public OnPlayerDeath(playerid,killerid,reason)
{
Dead[playerid] = 1;
GetPlayerPos(playerid,DX[playerid],DY[playerid],DZ[playerid]);
GetPlayerFacingAngle(playerid,DA[playerid]);
DTimer[playerid] = SetTimerEx("DSpawn", 180*1000, 0, "i",playerid);
return 1;
}
public OnPlayerDisconnect(playerid,reason)
{
Dead[playerid] = 0;
return 1;
}
public OnPlayerSpawn(playerid)
{
if(Dead[playerid] == 1)
{
SetTimerEx("DSpawned", 100, 0, "i",playerid);
}
return 1;
}
forward DSpawn(playerid);
public DSpawn(playerid)
{
if(Dead[playerid] == 1)
{
Dead[playerid] = 0;
TogglePlayerControllable(playerid,1);
ClearAnimations(playerid);
SpawnPlayer(playerid);
SetPlayerHealth(playerid,100);
SetCameraBehindPlayer(playerid);
}
}
forward DSpawned(playerid);
public DSpawned(playerid)
{
if(Dead[playerid] == 1)
{
SetPlayerPos(playerid,DX[playerid],DY[playerid],DZ[playerid]);
SetPlayerHealth(playerid,1); // Soll so aussehen, als ob man 0 Leben hätte^^
SetPlayerCameraPos(playerid,DX[playerid],DY[playerid],DZ[playerid]+3);
ResetPlayerWeapons(playerid);
SetPlayerCameraLookAt(playerid,DX[playerid],DY[playerid],DZ[playerid]);
SetPlayerFacingAngle(playerid,DA[playerid]);
TogglePlayerControllable(playerid,0);
ApplyAnimation(playerid,"PARACHUTE","FALL_skyDive_DIE",4.1,0,1,1,1,1);
}
}
strtok(const string[], &index)
{
new length = strlen(string);
while ((index < length) && (string[index] <= ' '))
{
index++;
}
new offset = index;
new result[20];
while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
{
result[index - offset] = string[index];
index++;
}
result[index - offset] = EOS;
return result;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/kill", cmdtext, true, 10) == 0) //Zum Testen
{
SetPlayerHealth(playerid,0);
return 1;
}
new cmd[30];
new idx;
cmd = strtok(cmdtext, idx);
if(strcmp(cmd, "/heilen", true) == 0)
{
new tmp[30];
tmp = strtok(cmdtext, idx);
new otherplayer = strval(tmp);
new Float:X,Float:Y,Float:Z;
GetPlayerPos(otherplayer,X,Y,Z);
if(IsPlayerConnected(otherplayer) == 1 && Dead[otherplayer] == 1 && IsPlayerInRangeOfPoint(playerid, 2.0, X, Y, Z) && playerid != otherplayer && Dead[playerid] == 0)
{
Dead[otherplayer] = 0;
TogglePlayerControllable(otherplayer,1);
KillTimer(DTimer[otherplayer]);
SetPlayerHealth(otherplayer,50);
SetCameraBehindPlayer(otherplayer);
ApplyAnimation(playerid,"ped","getup",2.5,0,1,1,0,1);
new Heilername[MAX_PLAYER_NAME];
new Opfername[MAX_PLAYER_NAME];
new string[128];
GetPlayerName(otherplayer, Opfername, sizeof(Opfername));
format(string, sizeof(string), "Du hast %s (ID:%d) wiederbelebt.",Opfername,otherplayer);
SendClientMessage(playerid,0xFFFF00AA, string);
new stringz[128];
GetPlayerName(playerid, Heilername, sizeof(Heilername));
format(stringz, sizeof(stringz), "Du wurdest von %s (ID:%d) wiederbelebt.",Heilername,playerid);
SendClientMessage(otherplayer,0xFFFF00AA, stringz);
}
return 1;
}
return 0;
}
public OnPlayerText(playerid, text[])
{
if(Dead[playerid] == 1)
{
SendClientMessage(playerid,0xFFFF00AA,"Tote können nicht reden.");
return 0;
}
return 1;
}