Hallo Leute Ich habe mal eine frage und zwar möchte ich bei meinem DM GM autos einbauen die aber erst ab eineer bestimmten Kill Score gefahren werden können zbs ab 200 Kills wenn einer nicht soviele kills hat sollte er rausgeschmiessen werden und im chat stehen du hast noch zu wenige kills für dieses Fahrzeug wie geht sowas am einfachsten ? hoffe einer kann mir helfen
Fahrzeug nur ab bestimmter Kill Score
- Manuel20
- Geschlossen
- Erledigt
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!
Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
-
-
Es gibt kompletzirte art und die leichte. Die leichte wäre:
if(GetVehicleModel(vehicleid) == 432)
{
if(Kill[playerid] < 2)
{
GameTextForPlayer(i, "~w~ Es werde 2 Kills Benötigt~w~!", 2000, 3);
RemovePlayerFromVehicle(playerid);
}
}Das ist ein Beispiel in leicht
-
new Kills[MAX_PLAYERS];
OnPlayerDeath:
Kills[killerid]+=1;
Dann musst du die Kills halt in dem Account speichern.
Und dann bei OnPlayerStateChange speziell - if(newstate == PLAYER_STATE_DRIVER)
musst du das einfügen:
new vehicleid = GetPlayerVehicleID(playerid);
if(GetVehicleModel(vehicleid) == 400 && Kills[playerid] < 200) // 400 zur Model ID ändern die du abfragen willst, und bei 200 die Kills.
{
RemovePlayerFromVehicle(playerid);
SendClientMessage(playerid,COLOR_GRAD2,"Für dieses Fahrzeug brauchst zu 200 Kills!");
} -
okay 8D danke und wie kann ich am einfachsten noch mehr fahzeuge dazu nhemen mit diversen kills ? also panzer 200 kills heli 150 kills usw
-
eer hat doch geschrieben ,dass es OnPlayerStateChange kommt
-
Ja ich meinte das vom 2 . Post von Haferbrei aber dan hat direkt 8D geschrieben hat sich überlappt klappt prima Danke
-
Gibt zwei arten:
else if(GetVehicleModel(vehicleid) == 401 && Kills[playerid] < 150) // 401 zur Model ID ändern die du abfragen willst, und bei 150 die Kills.
{
RemovePlayerFromVehicle(playerid);
SendClientMessage(playerid,COLOR_GRAD2,"Für dieses Fahrzeug brauchst zu 150 Kills!");
}Oder aber du machst das so: (dynamisch)
#define KILL_CARS 4 // 4 = Anzahl der Autos
new KillInfo[KILL_CARS][2] = {
{400,200},// Nach dem Schema Model-ID, Kills
{401,150},
{402,125},
{403,100}
};forward CheckKillCars(playerid,vehicleid);
Den Scheiß bei if(newstate == PLAYER_STATE_DRIVER) was ihr dir vorgeschlagen habe, wieder entfernen und das einfügen.
new vehicleid = GetPlayerVehicleID(playerid);
CheckKillCars(playerid,vehicleid);Und dann irgendwo im Script:
public CheckKillCars(playerid,vehicleid)
{
new string[128];
for(new i = 0; i <= KILL_CARS; i++)
{
if(GetVehicleModel(vehicleid) == KillInfo[i][0])
{
if(Kills[playerid] < KillInfo[i][1])
{
RemovePlayerFromVehicle(playerid);
format(string,128,"Nicht genügend Kills! Benötigt %d!",KillInfo[i][1]);
SendClientMessage(playerid,COLOR_GRAD2,string);
return 1;
}
}
}
return 1;
}Ist ungetestet, sollte aber funktionern.
Es ist bei weitem einfacher Autos hinzuzufügen, einfach die #define Variable erhöhen immer und dann das Auto nach dem Schema Model-ID, Kills einfügen. -
Das ist noch Geiler Danke dir werde es gleich mal testen
-
Das ist noch Geiler Danke dir werde es gleich mal testen
Und funktioniert?
-
leider noch errors
C:\pwn(7051) : error 017: undefined symbol "Kills"
C:\pwn(7051) : warning 215: expression has no effect
C:\pwn(7051) : error 001: expected token: ";", but found "]"
C:\pwn(7051) : error 029: invalid expression, assumed zero
C:\pwn(7051) : fatal error 107: too many error messages on one lineCompilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
4 Errors.
alles in dieser zeile:
if(Kills[playerid] < KillInfo[i][1])
und wo kommt jetzt genau das rein :
new vehicleid = GetPlayerVehicleID(playerid);
CheckKillCars(playerid,vehicleid);hier oder ? public OnPlayerStateChange(playerid, newstate, oldstate)
da habe ich aber schon das drin wie kann ich das noch dazu fügern also das habe ich im mom schon drin :
public OnPlayerStateChange(playerid, newstate, oldstate)
{
if (newstate == PLAYER_STATE_DRIVER)
{
if(GetPlayerVehicleID(playerid) == 416) {
new rand = random(3), Float:Health;
if(rand == 1) {
SendClientMessage(playerid,COLOR_RED,"- blabla");
if(GetPlayerHealth(playerid, Health) > 60) SetPlayerHealth(playerid,100);
else SetPlayerHealth(playerid,Health+(rand*13));
}
}
if (newstate == 2) KillTimer(dbtime);
if (newstate == PLAYER_STATE_ONFOOT) AntiDriveBy(playerid);
}
return 1;
} -
-
new Kills[MAX_PLAYERS];
OnPlayerDeath:
Kills[killerid]+=1;
Dann musst du die Kills halt in dem Account speichern.
Das für das Kills Problem
Und zum rest:
public OnPlayerStateChange(playerid, newstate, oldstate)
{
if (newstate == PLAYER_STATE_DRIVER)
{
new vehicleid = GetPlayerVehicleID(playerid);
new vehiclemodel = GetVehicleModel(vehicleid);
CheckKillCars(playerid,vehiclemodel);if(vehiclemodel == 416)
{
new rand = random(3), Float:Health;
if(rand == 1)
{
SendClientMessage(playerid,COLOR_RED,"- blabla");
if(GetPlayerHealth(playerid, Health) > 60) SetPlayerHealth(playerid,100);
else SetPlayerHealth(playerid,Health+(rand*13));
}
}
}
if (newstate == 2) KillTimer(dbtime);
if (newstate == PLAYER_STATE_ONFOOT) AntiDriveBy(playerid);
return 1;
}Wir haben uns beide vertan.
Wir sprechen die ganze Zeit von der MODEL-ID aber haben die vehicleid benutzt -
gut nun hab ich keine errors mehr aber kann dennoch alle fahrzeuge fahren die ich in die liste genommen habe
-
Jo ich weiß auch warum, ich habe doch keinen Fehler gemacht Also ist das jetzt doppelt gemoppelt mit der ID bei mir Kann also nicht funzen.
Ersetz wieder:CheckKillCars(playerid,vehiclemodel);
mit
CheckKillCars(playerid,vehicleid);
bei OnPlayerstatechange.
Dann geht das.
-
okay nun ich habe ja im scriot bei mir schon kills drin als score also player wird so geladen :
PlayerInfo[playerid][kills] = dini_Int(String, "kills");
wenn ich aber bei deinem public das so mache
public CheckKillCars(playerid,vehicleid)
{
new string[128];
for(new i = 0; i <= KILL_CARS; i++)
{
if(GetVehicleModel(vehicleid) == KillInfo[i][0])
{
if(kills[playerid] < KillInfo[i][1])
{
RemovePlayerFromVehicle(playerid);
format(string,148,"Du hast nicht genügend Kills für dieses Fahrzeug, Benötigt werden: %d Kills !",KillInfo[i][1]);
SendClientMessage(playerid,COLOR_GREY,string);
return 1;
}
}
}
return 1;
}kommt hier wieder in dieser zeile der error wie oben schon erwähnt:
if(kills[playerid] < KillInfo[i][1])
Error: C:\pwn(7057) : error 028: invalid subscript (not an array or too many subscripts): "kills"
C:\pwn(7057) : warning 215: expression has no effect
C:\pwn(7057) : error 001: expected token: ";", but found "]"
C:\pwn(7057) : error 029: invalid expression, assumed zero
C:\pwn(7057) : fatal error 107: too many error messages on one lineCompilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
4 Errors.
-
Du musst dann ja auch
if(PlayerInfo[playerid][kills] < KillInfo[i][1])
und nicht
if(kills[playerid] < KillInfo[i][1])
nehmen.
Und bei OnPlayerDeath:
PlayerInfo[killerid][kills]+=1;
-
Danke dir 8D. funktioniert perfekt !
-
Na dann, bin doch noch nicht eingerostet
-
breadfish.de
Hat das Thema geschlossen.