-.- da will ich mal was erklären, was für mich kompliziert war, und dann mach ichs auch noch Falsch xD
Sry
-.- da will ich mal was erklären, was für mich kompliziert war, und dann mach ichs auch noch Falsch xD
Sry
Du machst deinen Namen aber alle Ehre
10/10
SA-MP wird nicht aussterben... das ist wie Tetris und Super Mario ein Kult Spiel eben, generell ist GTA geil, egal ob SA oder IV jedes hat vor und nach Teile, jedoch "Stirbt" ein Spiel, mit solch einem Erfolg bestimmt nicht schnell aus^^
Fazit o.o:
SA-MP bleibt, es wird nicht aussterben
Vorwort
Hallo, ich wollte euch heute mal zeigen, wie man mit strget arbeitet!
Als aller erstes, müsst ihr die Verkürzung von strtok scripten, alsostrget und das geht so:
Ganz unten im Script:
// strget
stock strget(strx[], pos, search = ' ') {
new arg, ret[128], idxx;
for (new i = 0; i < strlen(strx); i++) {
if(strx[i] == search || i == strlen(strx) || strx[i + 1] == 10) {
arg++;
if (arg == pos + 1){
ret[i-idxx] = EOS;
return ret;
} else if (arg == pos)
idxx= i+1;
}
else if (arg == pos)
ret[i - idxx] = strx[i];
}
return ret;
}
Das alles nun zu erläutern, würde Anfänger nur durcheinander bringen, lediglich ist es einfach nur eine Abkürzung, des Komplizierten "strtok"!
Teil 1.
Da wir nun "strget" erstellt haben, erläutere ich mal kurz was es bringt!
Mit strget, können wir Commands Scripten, welche mit ID´s zu tun haben z.b /skin [Skin ID] etc, zudem ist strget wesentlich einfacher als strtok, naja nicht so viel Theorie und gleich zur Sache!
public OnPlayerCommandText(playerid, cmdtext[])
{
if(!strcmp(strget(cmdtext, 0), "/skin")) // Der commando, wenn ihr ein cmd mit strget macht, müsst ihr immer (!strcmp(strget(cmdtext, 0), "/")) verwenden, da es ohne das strget und !strcmp nicht möglich ist...
{
if(!IsPlayerAdmin(playerid))return SendClientMessage(playerid,ROT,"Du bist kein Admin!"); //Überprüft, ob der Spieler Admin ist
new skinx = strval(strget(cmdtext, 1)); //Beschreibt, was die erste Zahl nach /skin bedeutet, also bedeutet (cmdtext, "zahl") an welcher Stelle man z.b die Skin ID eintragen muss, im beispiel an erster Stelle nach /skin
new giveplayeridx = strval(strget(cmdtext, 2)); //Erklärt sich ja eigentlich nun von selber, dies ist nun die playerid, welcher wir den Skin zu weisen wollen!
if(skinx < 1 || skinx > 299) // das <1 || 299> heißt, wie Niedrig/Hoch die Zahl sein darf, bzw. hier sind nun Skin ID 1 bis 299 verfügbar, da dort < 1 (also von 1) || 299> (bis 299)
if(giveplayeridx < 0 || giveplayeridx > 100) //Hier das selbe, nur mit der Playerid, hier jedoch nur 0 bis 100, wieso "0"? Weil der Erste player der Joint ID 0 hat :D
{
SendClientMessage(playerid, ROT, "Da ist was falsch, benutze /skin [SkinID] [SpielerID]"); //Wenn man vergisst eine ID zu schreiben, komm diese Fehlermeldung
if(!IsPlayerConnected(giveplayeridx) && !IsPlayerNPC(giveplayeridx))return SendClientMessage(playerid, ROT, "Diese ID ist nicht vergeben!"); //Wenn eine Ungültige ID angegeben worden ist
return 1;
}
SetPlayerSkin(giveplayeridx, skinx); //Wenn alles richtig ist, soll der skin, der angegebenen PlayerID, auf den angegebenen Skin gesetzt werden
return 1;
}
return 0;
}
Das wars eigentlich auch schon, nur ein kleines Feines Tutorial für strget... wenn es etwas undeutlich/zu unerklärt ist, schreibt es bitte, ich werde versuchen es zu überarbeiten, da ich nicht genau wusste wie ich das jetzt formulieren sollte, aber zur Not sind ja noch die // Commends da
Naja ich hoffe ihr habts verstanden viel Spaß damit!
Edit:// Hab den Fehler gefunden
Na was wohl ?
Die Englisch-Kurse würden reich werden
xDDD This Post is make me Funny xDDD
Joar ganz okey die Community.
WTF ???
Die Comm ist einfach nur Geil!
B2T:
Ja, dass ist wohl die Beste SA-MP Community weit und breit
Lernen kann man hier Geil, einem wird meistens Direkt geholfen... sie dir mal an wie viele neue Projekte es hier gibt... ich frage mich immer, was wäre wenn es kein Deutsches SA-MP Forum gebe
Hab alles komplett umgeändert und es funktioniert nun, danke trotzdem
Hallo BreadFisha, ich hab en Problem, und zwar hab ich kein PlayerToPoint in meiner Include, kA wieso es wäre Nett wenn hier jemand eine Include reinstellen würde mit dem CMD^^
Oder i wer hat ne andere Lösung, zu dem Folgenden Problem:
Ich wollte eine Analyse+Abfrage erstellen , naja ihr sehr gleich was ich meine...
if(pickupid == pc)
{
GetVehiclePos(vID,2286.5090,78.3703,26.4844)
{
new analyse = random(5);
if(analyse == 1)
{
SendClientMessage(playerid,COLOR_YELLOW,"Die lichter dieses Fahrzeugs sind kaput!");
return 1;
}
else if (analyse == 2)
{
SendClientMessage(playerid,COLOR_YELLOW,"Die bremsen dieses Fahrzeugs sind kaput!");
return 1;
}
else if (analyse == 3)
{
SendClientMessage(playerid,COLOR_YELLOW,"Die Stoßstange dieses Fahrzeugs ist kaput!");
return 1;
}
else if (analyse == 4)
{
SendClientMessage(playerid,COLOR_YELLOW,"Die Achsen dieses Fahrzeugs sind gebrochen!");
return 1;
}
else if (analyse == 5)
{
SendClientMessage(playerid,COLOR_YELLOW,"Die Reifen dieses Fahrzeugs sind geplatzt!");
return 1;
}
else
{
SendClientMessage(playerid,ROT,"Es ist kein Fahrzeug in der Nähe!");
return 1;
}
}
}
Aber nun ist da ein Problem, dieses Error:
D:\GTA San Andreas\GTA San Andreas\GTA San Andreas\gamemodes\VillageRL.pwn(650) : error 035: argument type mismatch (argument 1)
Zeile 650:
GetVehiclePos(vID,2286.5090,78.3703,26.4844)
jedoch ist vID Difiniert:
new vID[MAX_VEHICLES];
es wäre mir aber lieber, wenn mir jemand eine Include mit PlayerToPoint geben könnte
aber ich bedanke mich für jede Hilfe, bzw. ich hoffe auf schnelle Hilfe von euch
Dann baust du halt noch ne Abfrage rein, ob er in einem Speziellen Team ist, oder was du halt brauchst...
Ist doch jetzt egal
B2T:
OnPlayerKeyStateChange will be called each time a key state is changed. It will never be called for up, down, left and right.
Heißt das nun ich kann damit nicht arbeiten?
Denn das muss ich wissen...
Zudem, wie schaffe ich es denn nun, das eine Message kommt wenn Vehicle Health bei 400 ist ?
Wie meinst du das, drück dich besser aus... ich versteh nix
bei 250.0 Brennt es
@ ZKX das hab ich unter
OnPlayerKeyStateChange
Ich hab nen Filterscript, jedoch hat man dort keine Menüs, sondern man macht einfach /[Name des Fahrzeugs] falls dir das auch reichen würde
Umsonst natürlich bzw. gabs mal i wo zu downloaden
Machs doch so :
public OnPlayerDeath(playerid, killerid, reason)
{
new skinid = GetPlayerSkin(playerid);
new teamid = GetPlayerTeam(playerid);
SetSpawnInfo(playerid,teamid,skinid,X Koadinate des Spawns,Y Koadinate des Spawns,Z Koadinate des Spawns,0,0,0,0,0,0); //Die 0en sind für Waffen etc. aber das weißt du ja bestimmt gg. müssen sie noch angepasst werden
SendClientMessage(playerid,ROT,"Du bist gestorben, und wirst nun respawnt!");
SendClientMessage(playerid,COLOR_YELLOW,"Kostenpunkt -500$");
GivePlayerMoney(playerid, -500);
return 1;
}
Sollte klappen
Ich mach mal nen Anderen Thread auf bzw, hab schon und mach den hier zu, geht ja jetzt eigentlich nur noch um die Keys...
Ich habe ein Problem,
#define PRESSED(%0) \
(((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
if (PRESSED( KEY_UP | KEY_DOWN | KEY_LEFT | KEY_RIGHT ))
Ist unter OnPlayerKeyStateChange, alles ist richtig, 0 Errors aber wenn ich jetzt einen Motorschaden mit meinem Auto mache (Das ist unter OnPlayerStateChange)
if(newstate == PLAYER_STATE_DRIVER)
{
new vehicleid = GetPlayerVehicleID(playerid), Float:vhp;
if(IsPlayerInVehicle(playerid,vehicleid))
GetVehicleHealth(vehicleid, vhp);
if(vhp<= 300)
{
new Float:vx, Float:vy, Float:vz;
SetVehicleVelocity(vehicleid, vx*0, vy*0, vz*0);
SendClientMessage(playerid,0xFF0000FF,"Das Fahrzeug hat einen Motorschaden!");
}
}
Dann kommt keine Meldung, dass ich einen Motorschaden habe, und kann einfach Weiterfahren...
Interessant ist jedoch, das wenn ich aus dem Auto dann wieder Aussteige und wieder Einsteige, dass mir dann erst gesagt wird das ich einen Motorschaden habe, ich jedoch einfach weiter fahren kann!
Habs auch schon mit HOLDING-KEY probiert, ging auch nicht mit den Variablen Wert der Tasten auch schon, was aber auch nicht ging, nur weiß ich nicht wieso...
ich hoffe mir kann schnell jemand helfen!
Geht immer noch nicht, jedoch funktioniert es Teilweise, zumindest wenn man "S" mitten in der Fahrt drückt hält man direkt an, ohne Bremsweg... zurück fahren kann trotzdem, oder wenn man ein Drive-By machen will hält man auch an!
Das Verhindert wieder nur Hoch,Runter mit Pfeiltasten etc,
*Erleuchtung komm*
Mir ist aufgefallen, das man ja normalerweise mit W,A,S,D+Hoch,Runter etc. lenken kann!
Wenn man jedoch das macht
#define HOLDING(%0) \
((newkeys & (%0)) == (%0))
if(newkeys & KEY_UP | newkeys & KEY_DOWN | newkeys & KEY_LEFT | newkeys & KEY_RIGHT | HOLDING(KEY_UP) | HOLDING(KEY_DOWN) | HOLDING(KEY_RIGHT) | HOLDING(KEY_LEFT))
Kann man nur HOCH,RUNTER etc. mit den Pfeiltasten nicht mehr verwenden! Das heißt eigentlich nur, dass wir die Tasten W,A,S,D noch hinzufügen müssen, aber wenn ich KEY_W
dahin schreibe, kommt ich muss es difinieren...