Sscanf oder ganz normal cmdtext?
Beiträge von Inaktiv_Für_Immer
In 10 Minuten startet der nächtliche Backupvorgang! Es kann währenddessen (ca. 10 Minuten) zu Einschränkungen bei der Nutzung des Forums kommen
Weitere Infos findet ihr im Thema Backup des Forums
-
-
Leider habe ich im Moment das Problem, das ich nicht weiß, wie ich die SpielerID aus deren Score herausfinden kann.
Doch, ich kann lesen, nur verstehe ich nicht, was Du genau möchtest. Was meinst Du mit die Spieler ID aus deren Score herausfinden kann. Erklär mal ein wenig ausführlicher.
-
Nice Tutorial.
Werde es auf jedenfall benutzen, hoffe bei Erros und Fehlern hilst du mir
Eine Frage noch, werden die Gebiete auch Abgespeichert?Ist eine Sache von paar Minuten, die Gebiete abzuspeichern. Bei Bedarf kann ich dir das gerne per PN erklären.
-
Die ID vom Spieler herausfinden?
Einfach hinter dem string "playerid" schreiben, dann haste die ID. Ein Beispiel:
if(strcmp(cmdtext,"/myid",true)==0)
{
new string[20];
format(string,sizeof(string),"Du hast die ID: %d", playerid);
SendClientMessage(playerid,FARBE,string);
return 1;
} -
ah danke! Wie kann ich das Englische (user was kicked from the server) deutsch mahen bzw den text verändern?Filterscripts -> base.pwn -> Bearbeiten
Die Befehle sind bei dem Base Filterscript, /pm, /kick und /ban.
Dazu noch eine gute Vorlage für Scripting mit strcmp
-
Irgendwo bei OnPlayerSpawn ist eine if Abfrage, ob pOrigin auf 1 ist. Dort ist auch der Spawn bestimmt, kannste dort ändern.
Und die Skins sind oben im Script definiert, glaube CIV oder so, kp. War so in der Art, kann mich noch erinnern:
new CIV[] = {SKINID,SKINID,SKINID};
Gruß, Bunnyhopper
-
Ein wenig Server lästig, findest du nicht ^^?
Ich hätte das ganze mit einem Timer gemacht.
8/10
-
Nettes TuT, aber man könnte das ja im Prinzip erweitern.
Mit Dini abspeichern, mit einem enum die Owner setzen, z.B gOwner, die Farben definieren, also wenn Fraktion XY Owner ist wird die Gangzone mit der Farbe XY angezeigt.
for(new i; i<sizeof(FightGebiete); i++)
{
new color;//Erstellt eine neue Variable
if(FightGebiete[i][gOwner] == 5){color=/////;}
if(FightGebiete[i][gOwner] == 6){color=/////;}
GangZoneShowForPlayer(playerid, FightGebiete[i], color);
}Dann müsste man ja noch die FightGebiete oben definieren:
new Gebiete[5][gebiet] = {
{blablablabla}
{blablablabla}
};Ich hatte es früher so gemacht, aber hab selbst kp mehr :D. Schon laange her, hehe.
Gebe dir 10 von 10 Punkten, sehr hilfreiches Tutorial für die Pawno Einsteiger
-
Mit was arbeitest Du?
sscanf, strcmp?
-
Ganz einfach eigentlich:
Um eine Gangzone zu erstellen, musst du GangZoneCreate nutzen, ein Beispiel:
Definiertes = GangZoneCreate(minX,minY,maxX,maxY); // Kommt unter GameModeInitEine Definierung für eine GangZone ist optional, wie bei einem Pickup, aber wenn Du dennoch einen Namen definieren möchtest, damit Du die Stelle leicht wieder finden kannst, musst Du ganz oben im Script folgendes eingeben:
[pwn]new Definiertes; // also ein Name für deine GangZone und dann vor GangZoneCreate der Name und ein = schreiben[/pwn]Und da Du ja ein Textdraw anzeigen möchtest, musst Du erstmal die Koordinaten rausfinden, dafür empfehle ich dir folgende Seite: (http://bsndesign.webs.com/tde.htm)
Wie Du ein Textdraw erstellst, und was Du alles einfügen möchtest, steht ebenfalls auf der Seite. Einfach mal durchlesen.
Jetzt wollen wir überprüfen, ob der Spieler eine NO-DM Zone betretet bzw. in einer ist, das machen so:
stock IsPlayerInArea(playerid,Float:minX,Float:minY,Float:maxX,Float:maxY)
{
new Float:pX,Float:pY,Float:pZ;
GetPlayerPos(playerid,pX,pY,pZ);
if(pX >= minX && pX <= maxX && pY >= minY && pY <= maxY) return 1;
else return 0;
}Einen stock erstellen. Dieser überprüft, ob der Spieler sich in einer bestimmten Zone befindet, fast so wie IsPlayerInRangeOfPoint, hier ein Beispiel:
if(strcmp(cmdtext,"/hallo",true)==0)
{
if(IsPlayerInArea(playerid,minX,minY,maxX,maxY)) // befindet sich der Spieler in Zone minX,minY,maxX,maxY?
{
SendClientMessage(playerid,FARBE,"Hallo!");
}
else // wenn er sich nicht dort aufhält, bekommt er ne fette message :D
{
SendClientMessage(playerid,FARBE,"Hau bloß ab für dich gibts kein hi!");
}
}So jetzt wollen wir den Spieler einen TextDraw anzeigen, wenn er sich in der Zone aufhält, dafür erstellen wir einen Timer, der dies, alle 10 Sekunden (oder dein gewünschtes Interval) überprüft:
Wann soll der Timer gestartet werden? Sagen wir mal, wenn der Spieler sich einloggt, also unter OnPlayerConnect:
SetTimer("NDMZoneCheck",10000,true); // SetTimer("timername",interval,wiederholung?); true = wiederholung, false = keineUnd für den Timer erstellen wir jetzt einen public:
forward NDMZoneCheck(playerid);
public NDMZoneCheck(playerid)
{
for (new i = 0; i < MAX_PLAYERS; i++) // oder GetMaxPlayers wenn du paar Ressourcen sparen möchtest, damit bekommen wir jeden Spieler
{
if(IsPlayerInArea(i,minX,minY,maxX,maxY)) // Wenn er in der NO DM Zone ist, wenn du mehrere NO dm Zonen hast einfach ein || und mit IsPlayerInArea weiter machen
{
TextDrawShowForPlayer(i,"dein "textdrawname"); // dein textdraw wird angezeigt wenn er die no dm zone betritt
}
else // und wenn nicht verstecken wir den textdraw
{
TextDrawHideForPlayer(i, "textdrawname"); // und weg isser
}
}
return 1;
}Bei weiteren Fragen, pn, hab das jetzt auf die schnelle geschrieben
PS: Ein Gangzone zeigst du mit GangZoneShowForPlayer (nur für den Spieler) oder GangZoneShowForAll (für alle) ein.
// geht auch anders, aber so find ich es am leichtesten xD //
-
Ich spiel da schon lange^^.
Ist ein guter Server und ich finde das Anti-Cheat System sehr gut
-
new bool: tor;
Bei deinem Befehl:
if(strcmp(cmdtext,"blablablablablabla
if(IsPlayerInRangeOfPoint(blablablabla))
if(tor == false) // wir fragen ab ob das bool auf false ist
{
// Deine commands
// deine commands
tor = true; // hier setzen wir das bool auf true
}
else if(tor == true) // und hier fragen wir ob, ob das Bool auf true ist, wenn ja, dann schließt sich das tor
{
// deine commands
// deine comands
tor = false; // und hier setzen wir das bool wieder auf false
}Verstanden?
-
if(strcmp(cmdtext,"/Kaufen",true)==0)
{
if(IsPlayerInRangeOfPoint(playerid,3.0,19.311354,37.134351,93.4234213))
{
if(Kekse[playerid] == 0)
{
GivePlayerMoney(playerid, -150);
SendClientMessage(playerid,0xFFFFFFFF, "Du hast Kekse gekauft. Esse deine Kekse mit /kekseessen");
Kekse[playerid] = 1;}
else // Hier wird Error gezeigt
{
SendClientMessage(playerid,0xFFFFFFFF, "Du hast bereits Kekse. Esse deine Kekse mit /kekseessen");
}
}
else
{
SendClientMessage(playerid,0xFFFFFFFF, "Du bist nicht im Keksladen.");
}
}So muss es gehen
-
Schau dir deins mal an, Atze:
if(strcmp(cmdtext,"/Kaufen",true)==0)
{
if(IsPlayerInRangeOfPoint(playerid,3.0,19.311354,37.134351,93.4234213))
{
Kekse[playerid] = 0;
{ // wofür ist diese klammer?
GivePlayerMoney(playerid, -150);
SendClientMessage(playerid,0xFFFFFFFF, "Du hast Kekse gekauft. Esse deine Kekse mit /kekseessen");
Kekse[playerid] = 1;}
else // Hier wird Error gezeigt
{
SendClientMessage(playerid,0xFFFFFFFF, "Du hast bereits Kekse. Esse deine Kekse mit /kekseessen");
}
}
else
{
SendClientMessage(playerid,0xFFFFFFFF, "Du bist nicht im Keksladen.");
}
} -
Ist mir ein bisschen zu "einfach", ich würde es so machen:
if(strcmp(cmdtext,"/Kaufen",true)==0)
{
if(IsPlayerInRangeOfPoint(playerid,3.0,19.311354,37.134351,93.4234213))
{
if(Kekse(playerid) <= 5)
{
new string[128];
Kekse[playerid] += 1;
format(string,sizeof(string),"Du hast dir Kekse gekauft. Esse deine Kekse mit /keksessen, du besitzt %d Kekse.",Kekse);
GivePlayerMoney(playerid, -150);
SendClientMessage(playerid,0xFFFFFFFF, string);
}
else
{
SendClientMessage(playerid,0xFFFFFFFF, "Du hast schon mehr als 5 Kekse. Esse sie um neue zu kaufen.");
}
}
else
{
SendClientMessage(playerid,0xFFFFFFFF, "Du bist nicht im Keksladen.");
}
}
if(strcmp(cmdtext,"/Kekseessen",true)==0)
{
if(Kekse[playerid]== 5 || Kekse[playerid] == 4 || Kekse[playerid] == 3 || Kekse[playerid] == 2 || Kekse[playerid] == 1)
{
new string[128];
Kekse[playerid] -= 1;
format(string,sizeof(string),"Du hast einen Keks gegessen. Du hast noch %d Kekse.",Kekse);
SetPlayerHealth(playerid, 100);
SendClientMessage(playerid,0xFFFFFFFF, string);
ApplyAnimation(playerid, "FOOD", "EAT_Burger", 3.0, 0, 0, 0, 0, 0); // Animation (Essen)
}
else
{
SendClientMessage(playerid,0xFFFFFFFF, "Du hast keine Kekse, kaufe Kekse im Keksladen.");
}
}Ansonsten nettes Tutorial
-
Oder du machst das ganze mit einem Dialog
-
Wieso nutzt die nicht die neuen Funktionen von 0.3d
OnPlayerGiveDamage oder OnPlayerTakeDamage
Ich würde es ungefähr so machen:
public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid)
{
new string[128], opfer[MAX_PLAYER_NAME], angreifer[MAX_PLAYER_NAME];
new weaponname[24];
GetPlayerName(playerid, opfer, sizeof (opfer));
GetPlayerName(issuerid, angreifer, sizeof (angreifer));
GetWeaponName(weaponid, weaponname, sizeof (weaponname));
if(weaponid == 38)
{
format(string, sizeof(string), "ANTI-CHEAT: %s griff %s mit einer %s an. Er wurde gebannt.", angreifer, opfer,weaponame);
SendClientMessageToAll(COLOR_GREY,string);
SendClientMessage(playerid,COLOR_RED," Du wurdest gebannt/gekickt, da Du dir eine Minigun ercheatest hast. ");
Kick(issuerid);
}
return 1;
} -
Ganz genau.
-
z.B so:
if(isPlayerInFrakt(playerid,1) isPlayerInFrakt(playerid,2))
Immer weiter mit "II"
-
Kopier doch einfach das:
public OnPlayerCommandText(playerid, cmdtext[])
{
if(strcmp(cmdtext,"/portlspd",true)==0)
{
SetPlayerPos(playerid,1532.2133,-1654.6699,13.3828);
SendClientMessage(playerid,0xFFFFFFFF,"Du wurdest zum LSPD Teleportiert");
return 1;
}
if(strcmp(cmdtext,"/portbsn",true)==0)
{
SetPlayerPos(playerid,4286,-929.3522,42.9395,103);
SendClientMessage(playerid,0xFFFFFFFF,"Du wurdest zum BSN Teleportiert ");
return 1;
}
}Funktioniert, musst nur richtig reinrücken, falls Warnings kommen