SetPlayerArmedWeapon wäre auch eine möglichkeit.
Habe da ganze mal in mein script eingefügt, ehm die waffen bleiben er wechselt nur zur faust oder ?
SetPlayerArmedWeapon wäre auch eine möglichkeit.
Habe da ganze mal in mein script eingefügt, ehm die waffen bleiben er wechselt nur zur faust oder ?
Hallo leute .. Fische pff^^^^
Ich wollte fragen wie man per script von einer Waffe zur -Faust wechseln kann.
Also ich habe da schon an
GivePlayerWeapon(playerid, 0, 0);
gedacht aber ich bin mir nicht sicher ,, möchte gerne eure meinung hören ?
Ersten würde ich wenn du mit DINI arbeitest du 128 als Größe eingestellt hast .ini benutzen.
Dann benutz doch bitte meine Passwort abfrage die ich weiter oben gepostet habe , die klappt hundert pro, dann editier ich deinen code ein bisschen:
stock loadPlayer(playerid)
{
new Spieler[128];
format(Spieler,sizeof(Spieler),"/Spieler/%s.ini",getPlayerName(playerid));
playerD[playerid][level] = dini_Int(Spieler,"Level");
SetPlayerMoney_Ex(playerid,dini_Int(Spieler, "Geld"));
SetPlayerScore(playerid,playerD[playerid][level]);
return 1;
}
stock SetPlayerMoney_Ex(playerid, amount)
{
playerD[playerid][geld] = 0;
GivePlayerMoney(playerid, amount);
playerD[playerid][geld] = amount;
return 1;
}
zeig wie dus laden lässt
if(!strcmp(intputtext,dini_Get(Spieler,"Passwort"),true))
{
//Passwort richtig
}
else
{
//Passwort falsch
}
//Goldkiller: Echt jetzt ? Willst du nicht den Zusammenhang zwischen ! und == 0 verstehen ? Ich lösch deinen Beitrag jetzt extra nicht, obwohl der absolut nichts neues zum Thema beiträgt.
//²Goldkiller: Für mich ist das Passwort "test123" nicht identisch mit "TEST123".
STell dein Timer mal auf 575
So , ich habe den Fehler gleich mal gefunden.
Also du fragst if(engine == VEHICLE_PARAMS_ON) ab
Aber hast es noch nicht in engine auslesen lassen.
stock Motor(playerid)
{
new engine,lights,alarm,doors,bonnet,boot,objective;
new vid = GetPlayerVehicleID(playerid);
if(vid != INVALID_VEHICLE_ID)
{
if(engine == VEHICLE_PARAMS_ON)
{
SetVehicleParamsEx(vid,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
GameTextForPlayer(playerid, "~n~~n~~n~~n~~n~~n~~W~Motor ~r~aus!", 2000, 5);
}
else
{
SetVehicleParamsEx(vid,VEHICLE_PARAMS_ON,lights,alarm,doors,bonnet,boot,objective);
GameTextForPlayer(playerid, "~n~~n~~n~~n~~n~~n~~W~Motor ~g~an!", 2000, 5);
}
}
}
zu
stock Motor(playerid)
{
new engine,lights,alarm,doors,bonnet,boot,objective;
new vid = GetPlayerVehicleID(playerid);
GetVehicleParamsEx(vid, engine,lights,alarm,doors,bonnet,boot,objective);
if(vid != INVALID_VEHICLE_ID)
{
if(engine == VEHICLE_PARAMS_ON)
{
SetVehicleParamsEx(vid,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
GameTextForPlayer(playerid, "~n~~n~~n~~n~~n~~n~~W~Motor ~r~aus!", 2000, 5);
}
else
{
SetVehicleParamsEx(vid,VEHICLE_PARAMS_ON,lights,alarm,doors,bonnet,boot,objective);
GameTextForPlayer(playerid, "~n~~n~~n~~n~~n~~n~~W~Motor ~g~an!", 2000, 5);
}
}
}
Alles anzeigen
Ne, stimmt nicht. Das wäre richtig bei:
if(!playerid && issuerid != INVALID_PLAYER_ID)
Wir haben aber,
if(playerid && issuerid != INVALID_PLAYER_ID)
Wäre:
if(playerid != 0 && issuerid != INVALID_PLAYER_ID)
Letztendlich ist es egal ob dort
if( playerid ) oder if( !playerid ) steht. Schließlich wäre beides nicht richtig um playerid zu prüfen auf eine gültige Spieler-ID.
Danke an dich Goldkiller , wusste garnicht das wenn playerid = 0 ist es als INVALID_PLAYER_ID zählt , naja du bist killer.
H4rd_B4se Außerdem lauten die Paramter des Callbacks anders. Es gibt jetzt einen mehr, nämlich bodypart. Trägt zwar nichts zum Tutorial bei, aber dass die Leute nicht vergessen
Danke an dich , so könnte ja man ein sehr einfaches HeadshotSystem etc machen
Ich finde das Tutorial eher ungeeignet es wirkt fast als ob du selbst nicht genau weist was du machst,...
- Du Speicherst die Killerid als PvarInt aber den namen nicht als PvarString ?
- Für was bei einmaligen Aufruf vom Namen einen eigenen Stock?
,...
Verbesser dein Tutorial am besten noch mal ein bisschen
So
Einmal wegen der ID und dann wegen dem string.
Z.B ich schiese dich an , ich gehe off ein anderer kommt on und bekommt meinen kill das macht keinen sinn
PS: Das mit stock ist nützlich
Ich weis was ich tuhe^^
Beavis bin auf deinen Wunsch eingegangen
Und Vegan dieses Tutorial ist nicht umbedingt für Anfänger
Wurde bearbeitet. Und Danke an Beavis
Nö du kannst den spieler auch auf ein Motorrad setzen lassen Glaube das war SeatID 2
Versuchs mal so
new veh = GetPlayerVehicleID(playerid);
new vehicleid = GetVehicleModel(veh);
PutPlayerInVehicle(pID, vehicleid, 3);
Hey leute, ich habe auf einigen servern gesehen das wenn man angeschossen wird und dann selbstmord macht, das dass system dann nicht erkennt das er voher angeschossen wurde.
Ich zeige euch heute wir ihr einen Intwert in eine PVar packen könnt somit die eigentliche killerid ermitteln könnt.
So was wird benötigt.
Einfache Publics und etwas grundkenntnis vobei das überflüssig ist weil ich das ja erkläre. Ein Public ist ein so genanntes callback
Zuerst einmal gehen wir zu OnPlayerTakeDamage
Die Folgenden Parameter des Callbacks lauten:[b]playerid[/b], [b]issuerid[/b], [b][color=#0000ff]Float[/color][/b]: [b]amount[/b], [b]weaponid[/b]
playerid = der getroffen wurde, issuerid = der den hit gelandet hat, Float: amount = Menge/Größe: Anzahl, weaponid = Mit welcher waffe der hit getäigt wurde.
public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid)
{
}
public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid)
{
if(playerid != 0 && issuerid != INVALID_PLAYER_ID)
{
}
}
Damit Fragen wir ab ob der der getroffen wurde und der den hitgelandet haben keine ungestreamten spieler sind.
&& = Und
Da gibt es noch was ähnliches bitte nicht verwechseln
|| = oder
INVALID_PLAYER_ID ist schon ein vorgefertiges #define / setting by SAMP
Heißt auf Deutsch ÜNGÜLTIGE_SPIELER_ID/NUMMER
public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid)
{
if(playerid != && issuerid != INVALID_PLAYER_ID)
{ SetPVarInt(playerid, "LastKillerid", issuerid);
}
}
So hier haben wir für den Spieler der getroffen wurde eine Vorgefertige string, int funtkion verwendet.
Aber ich zunächst einmal möchte ich PVar erklären.
PVar ist eine Vorgefertige Funktion von SAMP mit der man Strings, VariablenInts setzen kann.
SetPVarInt(userid, "Belibig", Int);
Dann gibt es aber noch ähnliche Funtkionen, bitte nicht verwechseln.
So nun haben wir da aber auch etwas vergessen.
Wie müssen abfragen ob der Spieler sich nicht gehited hat. (Durch Fallschaden)
public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid)
{
if(playerid != 0 && issuerid != INVALID_PLAYER_ID)
{
if(playerid != issuerid)
{
SetPVarInt(playerid, "LastKillerid", issuerid);
}
}
}
Aber nun müssen wir auch scripten das der genaue name des Hiters speichern lassen.
Dazu erstellen wir oben erstmal eine neue TextVariable.
new Killername[MAX_PLAYERS][24];
public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid)
{
if(playerid != 0 && issuerid != INVALID_PLAYER_ID)
{
if(playerid != issuerid)
{
SetPVarInt(playerid, "LastKillerid", issuerid);
format(Killername[playerid], 24, "%s", Spielername(issuerid));
}
}
}
Dann werdet ihr warscheinlich einen Error haben.
Spielername wurde nicht gefunden.
Wir erstellen uns nun einen stock.
stock Spielername(playerid) {
new name[24];
GetPlayerName(playerid, name, 24);
return name;
}
So name = die die neue Variable in der Funktion Spielername(Kann Belibig genannt werden)
GetPlayerName ist eine Funktion von SAMP und beteudet übersetzt BekommeSpielerName
Die Parameter dieser Funtkion heißen : [pwn]playerid, const name[], len[/pwn]
playerid =, für welche spielerid, const name[] = variablen textnamen : in dem fall name, len = sizeof(variablen textname) man kann aber genau so gut 24 hinschreiben also die Größe der Textvariable
So und nun fragt man sich warum returne ich name und nicht true oder 1 ?
Naja der name wird ja in der Textvariable name ausgegeben
Und dann muss ich returnen da es das ergebnis von name rausfiltert.
Alles anzeigen
[expander][list][*][u][b][color=#000000]Nun gehen wir zu OnPlayerDeath[/color][/b][/u][/list][/expander]
Dieses Callback hat folgende Parameter playerid, killerid, reason
playerid = der der gestorben ist , killerid = MÖRDER!!! xD, reason = Grund warum er gestorben ist, (Fallschaden etc)
public OnPlayerDeath(playerid, killerid, reason)
{
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
if(killerid != INVALID_PLAYER_ID)
{
}
return 1;
}
Ach ja ich habe ja noch garnicht erklärt was != beteudet.
!= beteudet "nicht"
Eigentlich beteudet ! auch "nicht"
Aber das es keine genauere Funk von SAMP ist würden wir dabei ein Warn/Error bekommen.
= Beteudet eigentlich Setze aber mit ! verbunden also != beteudet es "nicht"
public OnPlayerDeath(playerid, killerid, reason)
{
if(killerid != INVALID_PLAYER_ID)
{
}
else
{
}
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
if(killerid != INVALID_PLAYER_ID)
{
}
else
{
if(IsPlayerConnected(GetPVarInt(playerid, "LastKillerid") && if(!strcmp(Spielername(GetPVarInt(playerid, "LastKillerid")), Killername[playerid], true))
{
// Das Was Passieren soll ;)
}
}
return 1;
}
IsPlayerConnnected heißt auf Deutsch IstSpielerVerbunden
Die Parameter lauten : playerid
So nun zu strcmp und wieso ich ein ! drangedockt habe obwohl es ja anscheindent "nicht" heißt
strmcp ist eine sehr nützliche Funktion von SAMP um Strings, Texte zu vergleichen
Die Parameter lauten: const string1[], const string2[], bool:ignorecase, length
const string1[] = Erste/r Textvariable, String in dem Fall Spielername(...)
const string2[] = 2. String, Text wobei du dann auch "" machen kannst ;)
bool: ja oder nein
lenght: beteudet länge , wobei ich diese Feld immer freilasse
Alles anzeigen
So das war im Großen und Ganzen das Anti - Selbstmord System
Alles nochmal in einer PWN Reingeklatscht:
public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid)
{
if(playerid && issuerid != INVALID_PLAYER_ID)
{
if(playerid != issuerid)
{
SetPVarInt(playerid, "LastKillerid", issuerid);
format(Killername[playerid], 24, "%s", Spielername(issuerid));
}
}
}
Spielername(playerid) {
new name[24];
GetPlayerName(playerid, name, 24);
return name;
}
public OnPlayerDeath(playerid, killerid, reason)
{
if(killerid != INVALID_PLAYER_ID)
{
}
else
{
if(IsPlayerConnected(GetPVarInt(playerid, "LastKillerid") && if(!strcmp(Spielername(GetPVarInt(playerid, "LastKillerid")), Killername[playerid], true))
{
// Das Was Passieren soll ;)
}
}
return 1;
}
Mit Freundlichen Grüßen
MrPawn, und bitte beschwert euch nicht wegen Rechtschreibfehler, Grammatik (Bin Russe )
Einfach in der Nähe mappen wo die andere Interiors auch sind.
Das Versuche ich mal warte, danke schonmal
Hey ihr Fische :D,
Ich bräuchte einen Tipp für meine Interiors.
Wo sollte man am besten einen Interior hin.
So das keine Wolken und geräusche drinnen sind ?
for(new i=0; i<MAX_FRACS; i++)
ersetzen durch
for(new i=0; i<sizeof(MAX_FRACS); i++)
//EntBannung der Spieler nach TimeBan
new Stunde, Minute, Sekunde, Tag, Monat, Jahr;
format(Spieler, sizeof(Spieler), "/Acc/%s.ini", GetName(playerid));
gettime(Stunde, Minute, Sekunde);
getdate(Tag, Monat, Jahr);
sStats[playerid][sTimeBanned] = dini_Int(Spieler, "sTimeBanned");
if(sStats[playerid][sTimeBanned] >= 24)
{
if(Tag >= dini_Int(Spieler, "TBan_Day") && Stunde >= dini_Int(Spieler, "TBan_Hour") && Minute >= dini_Int(Spieler, "Minute"))
{
sStats[playerid][sTimeBanned] = 0;
}
else
{
SendClientMessage(playerid, Rot, "Du bist auf Zeit gebannt!");
return Kick_Ex(playerid);
}
}
else
{
if(Stunde >= dini_Int(Spieler, "TBan_Hour") && Minute >= dini_Int(Spieler, "Minute"))
{
sStats[playerid][sTimeBanned] = 0;
}
else
{
SendClientMessage(playerid, Rot, "Du bist auf Zeit gebannt!");
return Kick_Ex(playerid);
}
}
Dies ist mein TimeBan system aber das wird nicht aufgerufen also er wird nicht gekickt