if (!strcmp("/meinhaus", cmdtext))
{
if(IsPlayerAdmin(playerid))
SetPlayerPos(playerid,1248.9946,-806.2303,84.1406);
else
SendClientMessage(playerid, rot, "Du bist kein Admin!");
return 1;
}
Ist eindeutig kürzer.
if (!strcmp("/meinhaus", cmdtext))
{
if(IsPlayerAdmin(playerid))
SetPlayerPos(playerid,1248.9946,-806.2303,84.1406);
else
SendClientMessage(playerid, rot, "Du bist kein Admin!");
return 1;
}
Ist eindeutig kürzer.
Alles anzeigenWie kann ich ein Haus erstellen ??..
Ich hab mit dem Map Editior gearbeitet und hab ein Haus erstellt ..
Also dann in Pawno
mit
CreateObject ...
gemacht und es ist da nun stellt sich die Frage wie kann ich es als ''Haus'' nutzen also /buy...
Mit Icon usw...
Das ist kein Fragethread.
Alles anzeigenif (!strcmp("/meinhaus", cmdtext))
{
if(IsPlayerAdmin(playerid))
SetPlayerPos(playerid,1248.9946,-806.2303,84.1406);
else
SendClientMessage(playerid, rot, "Du bist kein Admin!");
return 1;
}
Ist eindeutig kürzer.
Okay...xD
Und noch mal Zeilenplatzsparender
if (!strcmp("/meinhaus", cmdtext))
{
if(IsPlayerAdmin(playerid)) SetPlayerPos(playerid,1248.9946,-806.2303,84.1406);
else SendClientMessage(playerid, rot, "Du bist kein Admin!");
return 1;
}
Nicht von mir aber nützlich:
Car Namen
//-------------[carnames]-------------------------
new VehicleNames[212][] = {
"Landstalker", "Bravura", "Buffalo", "Linerunner", "Perennial", "Sentinel",
"Dumper", "Firetruck" , "Trashmaster" , "Stretch", "Manana", "Infernus",
"Voodoo", "Pony", "Mule", "Cheetah", "Ambulance", "Leviathan", "Moonbeam",
"Esperanto", "Taxi", "Washington", "Bobcat", "Mr Whoopee", "BF Injection",
"Hunter", "Premier", "Enforcer", "Securicar", "Banshee", "Predator", "Bus",
"Rhino", "Barracks", "Hotknife", "Trailer", "Previon", "Coach", "Cabbie",
"Stallion", "Rumpo", "RC Bandit", "Romero", "Packer", "Monster", "Admiral",
"Squalo", "Seasparrow", "Pizzaboy", "Tram", "Trailer", "Turismo", "Speeder",
"Reefer", "Tropic", "Flatbed","Yankee", "Caddy", "Solair","Berkley's RC Van",
"Skimmer", "PCJ-600", "Faggio", "Freeway", "RC Baron","RC Raider","Glendale",
"Oceanic", "Sanchez", "Sparrow", "Patriot", "Quad", "Coastguard", "Dinghy",
"Hermes", "Sabre", "Rustler", "ZR-350", "Walton", "Regina", "Comet", "BMX",
"Burrito", "Camper", "Marquis", "Baggage", "Dozer","Maverick","News Chopper",
"Rancher", "FBI Rancher", "Virgo", "Greenwood","Jetmax","Hotring","Sandking",
"Blista Compact", "Police Maverick", "Boxville", "Benson","Mesa","RC Goblin",
"Hotring Racer", "Hotring Racer", "Bloodring Banger", "Rancher", "Super GT",
"Elegant", "Journey", "Bike", "Mountain Bike", "Beagle", "Cropdust", "Stunt",
"Tanker", "RoadTrain", "Nebula", "Majestic", "Buccaneer", "Shamal", "Hydra",
"FCR-900","NRG-500","HPV1000","Cement Truck","Tow Truck","Fortune","Cadrona",
"FBI Truck", "Willard", "Forklift","Tractor","Combine","Feltzer","Remington",
"Slamvan", "Blade", "Freight", "Streak","Vortex","Vincent","Bullet","Clover",
"Sadler", "Firetruck", "Hustler", "Intruder", "Primo", "Cargobob", "Tampa",
"Sunrise", "Merit", "Utility Truck", "Nevada", "Yosemite", "Windsor", "Monster",
"Monster","Uranus","Jester","Sultan","Stratum","Elegy","Raindance","RCTiger",
"Flash","Tahoma","Savanna", "Bandito", "Freight", "Trailer", "Kart", "Mower",
"Dune", "Sweeper", "Broadway", "Tornado", "AT-400", "DFT-30", "Huntley",
"Stafford", "BF-400", "Newsvan","Tug","Trailer","Emperor","Wayfarer","Euros",
"Hotdog", "Club", "Trailer", "Trailer","Andromada","Dodo","RC Cam", "Launch",
"Police Car LSPD", "Police Car SFPD","Police Car LVPD","Police Ranger",
"Picador", "S.W.A.T. Van", "Alpha", "Phoenix", "Glendale", "Sadler",
"Luggage Trailer","Luggage Trailer","Stair Trailer", "Boxville", "Farm Plow",
"Utility Trailer"
};
PlayerToPoint
//--------------------------------------------[PlayerToPoint]------------------------------------------
stock PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z)
{
if(IsPlayerConnected(playerid))
{
new Float:oldposx, Float:oldposy, Float:oldposz;
new Float:tempposx, Float:tempposy, Float:tempposz;
GetPlayerPos(playerid, oldposx, oldposy, oldposz);
tempposx = (oldposx -x);
tempposy = (oldposy -y);
tempposz = (oldposz -z);
if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
{
return 1;
}
}
return 0;
}
GetDistanceBetweenPlayers
//-------------------------------------------[GetDistanceBetweenPlayers]-------------------------------------
stock GetDistanceBetweenPlayers(playerid, playerid2)
{
new Float:x1,Float:y1,Float:z1,Float:x2,Float:y2,Float:z2;
new Float:tmpdis;
GetPlayerPos(playerid,x1,y1,z1);
GetPlayerPos(playerid2,x2,y2,z2);
tmpdis = floatsqroot(floatpower(floatabs(floatsub(x2,x1)),2)+floatpower(floatabs(floatsub(y2,y1)),2)+floatpower(floatabs(floatsub(z2,z1)),2));
return floatround(tmpdis);
}
mfg
InFaIN
Ich möchte ja immer möglichst viele Zeilen, damit der Script größer wirkt. x)
Nützlichste Funktion ever ist eh PlayerToPoint.
Ich habe soeben meine erste .inc geschrieben. Es eig nur ein Befehl, der aber sehr nützlich sein kann:
AddTeleport(playerid,Float:X,Float:Y,Float:Z,Float:Angle,int,vir,price) //XYZ koords, Angle=Drehung, int=interior, vir=virtualworld, price=Preis
Ist zwar nur ne kleinichkeit, bin aber trotzdem stolz
PS: wenn man bei price 50 eingibt, werden 50 abgezogen(GivePlayerMoney(playerid,-price); )
Alles anzeigenIch habe soeben meine erste .inc geschrieben. Es eig nur ein Befehl, der aber sehr nützlich sein kann:
AddTeleport(playerid,Float:X,Float:Y,Float:Z,Float:Angle,int,vir,price) //XYZ koords, Angle=Drehung, int=interior, vir=virtualworld, price=Preis
Ist zwar nur ne kleinichkeit, bin aber trotzdem stolz
PS: wenn man bei price 50 eingibt, werden 50 abgezogen(GivePlayerMoney(playerid,-price); )
naya^^ aba eigl schon ganz ok^^
Hehe, ja. Ich tüftel weiter an etwas größerem, dann post ichs hier
have fun ;D
Ich habe ma einen Nitrocmd erstellt, bei dem der Client nicht Crashen kann:
stock IsNoNitroCar(vehicleid)
{
if(vehicleid == 581 || vehicleid == 523 || vehicleid == 462 || vehicleid == 521 || vehicleid == 463 || vehicleid == 522 || vehicleid == 461 || vehicleid == 448 || vehicleid == 468 || vehicleid == 586 || vehicleid == 509 || vehicleid == 481 || vehicleid == 510 || vehicleid == 472 || vehicleid == 473 || vehicleid == 493 || vehicleid == 595 || vehicleid == 484 || vehicleid == 430 || vehicleid == 453 || vehicleid == 452 || vehicleid == 446 || vehicleid == 454 || vehicleid == 590 || vehicleid == 569 || vehicleid == 537 || vehicleid == 538 || vehicleid == 570 || vehicleid == 449)
{
return 1;
}
else return 0;
}
Dann hier der eigentlich cmd:
if (strcmp("/nitro", cmdtext, true) == 0)
{
if (IsPlayerInAnyVehicle(playerid))
{
if(IsNoNitroCar(GetVehicleModel(GetPlayerVehicleID(playerid))))
{
SendClientMessage(playerid,RED,"Dein Auto ist nicht Nitro-Kampatibel!");
SetVehicleHealth(GetPlayerVehicleID(playerid), 1000);
}
else
{
AddVehicleComponent(GetPlayerVehicleID(playerid), 1010);
}
}
else SendClientMessage(playerid, RED, "Du bist in keinem Fahrzeug!");
return 1;
}
Gibt zurück, wieviele User gerade online sind. Nützlich für Teambalance Scripte
stock GetOnlinePlayers()
{
new players = 0;
for(new i=0; i<GetMaxPlayers(); i++)
{
if(IsPlayerConnected(i)) players++;
}
return players;
}
Servername alle X Sekunden ändern mit X-beliebig vielen Namen.
forward Hostname();
#define MAX_NAMES 5
new Name;
new Names[MAX_NAMES][] = {"First Name", "Second Name", "Third Name", "Fourth Name", "Fifth Name"};
new Nstring[128];
SetTimer("Hostname", 10*1000, 1);
Name = 0;
public Hostname()
{
for(new i=0; i<MAX_NAMES; i++)
{
if(Name = i)
{
format(Nstring, sizeof(Nstring), "hostname %s", Names[i]);
if(Name = MAX_NAMES) Name = 0;
else Name++;
break;
}
}
SendRconCommand(Nstring);
return 1;
}
SendClientMessageEx(playerid, color, string[], {Float,_}:...);
#define MAX_STRTOK_VALUE 265
stock SendClientMessageFormat[MAX_STRTOK_VALUE];
#define SendClientMessageEx(%1,%2,%3,%4); format(SendClientMessageFormat,MAX_STRTOK_VALUE,%3,%4);SendClientMessage(%1,%2,SendClientMessageFormat);
RandomPlayer()
Etwas auf dem alten Stand....
stock RandomPlayer()
{
new Count;
for(new i=0; i<GetMaxPlayers(); i++) if(IsPlayerConnected(i)) Count ++;
if(Count == 0) return INVALID_PLAYER_ID;
new Players[Count];
Count=0;
for(new i=0; i<GetMaxPlayers(); i++) Players[Count] = playerid; Count++;
return Players[random(Count)];
}
LoadClasses(...);
Nicht von mir! Erstellt alles Playerclassen ausser die "..."
stock LoadClasses( ... )
{
new bBreak = 0, iNumArgs= numargs( );
for(new i=0; i<300; i++)
{
for(new j=0; j<iNumArgs; j++)
{
if(i == getarg(j))
{
bBreak = 1;
break;
}
}
if (!bBreak)
{
switch(i)
{
case 3 .. 6, 8, 42, 65, 74, 86, 119, 149, 208, 273, 289: continue;
}
AddPlayerClass(i, Start_Config);
}
bBreak = 0;
}
return 1;
}
AddTextCommand(const command[], color, const message[], text[])
Unter OnPlayerText(Bsp.): AddTextCommand("!test", 0x00FF00FF, "Test Cmd", text);
stock AddTextCommand(const command[], color, const message[], text[])
{
if (!strcmp(text, command, true)) {
SendClientMessageToAll(color, message);
return 1;
}
return 1;
}
Meine Version vom Servernamen ändern!
Ich hatte diese version genau zu dem Zeitpunkt programiert wo ihn Rafelder hereingestellt hat....... Er war nur schneller als ich
Also das hier ganz oben hin:
forward changename();
//changename
#define MAX_SERVER_NAMES 2
new server_name;
new server_names[MAX_SERVER_NAMES][] = {
{"Name1"},
{"Name2"}
};
Um jetzt mehr servernamen zu nehmen muss man 1. MAX_SERVER_NAMES einstellen und 2. den namen im array hinzufügen....
So nun dies hier bei OnGamemOdeInit:
SetTimer("changename",6000,1);
Will man nun den intervall ändern einfach die Timerzeit verändern........
So schließlich das ans ende vom Script:
public changename()
{
new string[255];
if(server_name >= MAX_SERVER_NAMES-1)
server_name = -1;
if(server_name < MAX_SERVER_NAMES-1)
server_name++;
format(string,sizeof(string),"hostname %s",server_names[server_name]);
SendRconCommand(string);
}
Mich würde interesieren welche version besser ist......
mfg
InFaIN
Ein neuer Codeschnipsel von mir. Is nur ne ganzganz kleine Kleinigkeit, aber sehr nützlich für die Godfahternutzer:
stock IsPlayerInFrac(playerid,fracid)
{
if (PlayerInfo[playerid][pMember] == fracid || PlayerInfo[playerid][pLeader] == fracid) return 1;
else return 0;
}
Ein Beispiel dafür:
if(IsPlayerInFrac(playerid,1) print("Er ist ein Cop!");
else print("Er ist kein Cop!");
VehicleChat(playerid,text[])
playerid = Player ID des Spieler der den Text schreibt
text = Textnachricht die an die restlichen Leute im Fahrzeug gesendet werden soll.
... Bezug auf den Thread : Klick
#define COLOR_RED 0xAA3333AA
#define COLOR_BLUE 0x0099FFAA
stock VehicleChat(playerid,text[]) {
new
vid=GetPlayerVehicleID(playerid),
s[128],
ThePlayer[MAX_PLAYER_NAME];
GetPlayerName(playerid,ThePlayer,MAX_PLAYER_NAME);
format(s,sizeof(s),"[VehicleChat]%s: %s",ThePlayer,text);
if(vid!=0) {
for(new i,j=GetMaxPlayers();i<j;i++) {
if(GetPlayerVehicleID(i)==vid) {
SendClientMessage(i,COLOR_BLUE,s);
}
}
}
return 1;
}
/* Beispiel */
public OnPlayerCommandText(playerid, cmdtext[])
{
if(!strcmp(cmdtext,"/vchat",false,6)) {
if(!strlen(cmdtext[7])) return SendClientMessage(playerid,COLOR_RED,"You failed!");
return VehicleChat(playerid,cmdtext[7]);
}
return 0;
}
kann mir wer sagen was stock bedeutet ? Also was mir das bringt ?
Es ist in etwa wie pulic, nur dass man Sachen wie floatsub(x,y,blabla) oder so wiedergeben kann, nur es wird nur von Copiler beachtet, wenn es denn Auch im Script nochmals benutzt wird.
Bitte koregieren, bin nicht sicher!
hä das heist hier muss ich was machen ? Hab gedacht damit kann ich sec definieren
stock Countdown(sec)
{
SetTimerEx("countdown",1000,0,"ii",playerid,sec);
}
<br><blockquote username="Driver" linkhref="index.php?page=Thread&postID=48#post48" class="wysiwygQuote">So: Afk Command:<br><b> Unter public OnPlayerCommandText(playerid, cmdtext []) dass einfügen:</b><br>if(strcmp(cmdtext, "/afk", true) == 0) { <br>new str[256], pname[256]; GetPlayerName(playerid, pname, 256);<br>format(str, 256, "*%s ist afk!", pname, cmdtext[4]);<br>SendClientMessage(playerid, COLOR_RED, "Um dich Zurück zumelden, tippe /back");<br>SendClientMessageToAll(0x4682B4AA, str);<br>TogglePlayerControllable(playerid, 0);<br>return 1;<br>}<br>if(strcmp(cmdtext, "/back", true) == 0) {<br>new str[256], pname[256]; GetPlayerName(playerid, pname, 256);<br>format(str, 256, "*%s ist von afk zurueck!", pname, cmdtext[4]);<br>SendClientMessageToAll(0x4682B4AA, str);<br>GameTextForPlayer(playerid,"~w~willkommen zurueck. :)!",2500,3);<br>TogglePlayerControllable(playerid, 1);<br>return 1;<br>}<br>Mit /afk kannst du dich abmelden, mit /back zurück.<br><br>Wenn ihr die Farben nocht nicht habt, einfach ändern oder Definieren.<br><br>#define COLOR_FARBENNAME Farben Hexcode am Anfang eurer Gamemode.<br><br>Bei Fehlern, bitte Posten, anders kann ich es nicht Korrigieren. <img src="../wcf/images/smilies/wink.png" alt=";)"></blockquote><br>da kommt bei mir immer fehlercode:<br><br>C:\Dokumente und Einstellungen\Flori\Eigene Dateien\Projeckte\samp022server.win32(2)\pawno\life.pwn(146) : warning 217: loose indentation<br>C:\Dokumente und Einstellungen\Flori\Eigene Dateien\Projeckte\samp022server.win32(2)\pawno\life.pwn(149) : warning 217: loose indentation<br>C:\Dokumente und Einstellungen\Flori\Eigene Dateien\Projeckte\samp022server.win32(2)\pawno\life.pwn(149) : error 029: invalid expression, assumed zero<br>C:\Dokumente und Einstellungen\Flori\Eigene Dateien\Projeckte\samp022server.win32(2)\pawno\life.pwn(149) : error 004: function "OnPlayerInfoChange" is not implemented<br>C:\Dokumente und Einstellungen\Flori\Eigene Dateien\Projeckte\samp022server.win32(2)\pawno\life.pwn(154) : warning 225: unreachable code<br>C:\Dokumente und Einstellungen\Flori\Eigene Dateien\Projeckte\samp022server.win32(2)\pawno\life.pwn(154) : error 029: invalid expression, assumed zero<br>C:\Dokumente und Einstellungen\Flori\Eigene Dateien\Projeckte\samp022server.win32(2)\pawno\life.pwn(154) : error 004: function "OnPlayerEnterVehicle" is not implemented<br>C:\Dokumente und Einstellungen\Flori\Eigene Dateien\Projeckte\samp022server.win32(2)\pawno\life.pwn(159) : warning 225: unreachable code<br>C:\Dokumente und Einstellungen\Flori\Eigene Dateien\Projeckte\samp022server.win32(2)\pawno\life.pwn(159) : error 029: invalid expression, assumed zero<br>C:\Dokumente und Einstellungen\Flori\Eigene Dateien\Projeckte\samp022server.win32(2)\pawno\life.pwn(159) : error 004: function "OnPlayerExitVehicle" is not implemented<br>C:\Dokumente und Einstellungen\Flori\Eigene Dateien\Projeckte\samp022server.win32(2)\pawno\life.pwn(164) : warning 225: unreachable code<br>C:\Dokumente und Einstellungen\Flori\Eigene Dateien\Projeckte\samp022server.win32(2)\pawno\life.pwn(164) : error 029: invalid expression, assumed zero<br>C:\Dokumente und Einstellungen\Flori\Eigene Dateien\Projeckte\samp022server.win32(2)\pawno\life.pwn(164) : error 004: function "OnPlayerStateChange" is not implemented<br>C:\Dokumente und Einstellungen\Flori\Eigene Dateien\Projeckte\samp022server.win32(2)\pawno\life.pwn(169) : warning 225: unreachable code<br>C:\Dokumente und Einstellungen\Flori\Eigene Dateien\Projeckte\samp022server.win32(2)\pawno\life.pwn(169) : error 029: invalid expression, assumed zero<br>C:\Dokumente und Einstellungen\Flori\Eigene Dateien\Projeckte\samp022server.win32(2)\pawno\life.pwn(169) : error 004: function "OnPlayerEnterCheckpoint" is not implemented<br>C:\Dokumente und Einstellungen\Flori\Eigene Dateien\Projeckte\samp022server.win32(2)\pawno\life.pwn(174) : warning 225: unreachable code<br>C:\Dokumente und Einstellungen\Flori\Eigene Dateien\Projeckte\samp022server.win32(2)\pawno\life.pwn(174) : error 029: invalid expression, assumed zero<br>C:\Dokumente und Einstellungen\Flori\Eigene Dateien\Projeckte\samp022server.win32(2)\pawno\life.pwn(174) : error 004: function "OnPlayerLeaveCheckpoint" is not implemented<br>C:\Dokumente und Einstellungen\Flori\Eigene Dateien\Projeckte\samp022server.win32(2)\pawno\life.pwn(179) : warning 225: unreachable code<br>C:\Dokumente und Einstellungen\Flori\Eigene Dateien\Projeckte\samp022server.win32(2)\pawno\life.pwn(179) : error 029: invalid expression, assumed zero<br>C:\Dokumente und Einstellungen\Flori\Eigene Dateien\Projeckte\samp022server.win32(2)\pawno\life.pwn(179) : error 004: function "OnPlayerEnterRaceCheckpoint" is not implemented<br>C:\Dokumente und Einstellungen\Flori\Eigene Dateien\Projeckte\samp022server.win32(2)\pawno\life.pwn(184) : warning 225: unreachable code<br>C:\Dokumente und Einstellungen\Flori\Eigene Dateien\Projeckte\samp022server.win32(2)\pawno\life.pwn(184) : error 029: invalid expression, assumed zero<br>C:\Dokumente und Einstellungen\Flori\Eigene Dateien\Projeckte\samp022server.win32(2)\pawno\life.pwn(184) : error 004: function "OnPlayerLeaveRaceCheckpoint" is not implemented<br>C:\Dokumente und Einstellungen\Flori\Eigene Dateien\Projeckte\samp022server.win32(2)\pawno\life.pwn(189) : warning 225: unreachable code<br>C:\Dokumente und Einstellungen\Flori\Eigene Dateien\Projeckte\samp022server.win32(2)\pawno\life.pwn(189) : error 029: invalid expression, assumed zero<br>C:\Dokumente und Einstellungen\Flori\Eigene Dateien\Projeckte\samp022server.win32(2)\pawno\life.pwn(189) : error 004: function "OnRconCommand" is not implemented<br>C:\Dokumente und Einstellungen\Flori\Eigene Dateien\Projeckte\samp022server.win32(2)\pawno\life.pwn(194) : warning 225: unreachable code<br>C:\Dokumente und Einstellungen\Flori\Eigene Dateien\Projeckte\samp022server.win32(2)\pawno\life.pwn(194) : error 029: invalid expression, assumed zero<br>C:\Dokumente und Einstellungen\Flori\Eigene Dateien\Projeckte\samp022server.win32(2)\pawno\life.pwn(194) : error 004: function "OnObjectMoved" is not implemented<br>C:\Dokumente und Einstellungen\Flori\Eigene Dateien\Projeckte\samp022server.win32(2)\pawno\life.pwn(199) : warning 225: unreachable code<br>C:\Dokumente und Einstellungen\Flori\Eigene Dateien\Projeckte\samp022server.win32(2)\pawno\life.pwn(199) : error 029: invalid expression, assumed zero<br>C:\Dokumente und Einstellungen\Flori\Eigene Dateien\Projeckte\samp022server.win32(2)\pawno\life.pwn(199) : error 004: function "OnPlayerObjectMoved" is not implemented<br>C:\Dokumente und Einstellungen\Flori\Eigene Dateien\Projeckte\samp022server.win32(2)\pawno\life.pwn(204) : warning 225: unreachable code<br>C:\Dokumente und Einstellungen\Flori\Eigene Dateien\Projeckte\samp022server.win32(2)\pawno\life.pwn(204) : error 029: invalid expression, assumed zero<br>C:\Dokumente und Einstellungen\Flori\Eigene Dateien\Projeckte\samp022server.win32(2)\pawno\life.pwn(204) : error 004: function "OnPlayerPickUpPickup" is not implemented<br>C:\Dokumente und Einstellungen\Flori\Eigene Dateien\Projeckte\samp022server.win32(2)\pawno\life.pwn(209) : warning 225: unreachable code<br>C:\Dokumente und Einstellungen\Flori\Eigene Dateien\Projeckte\samp022server.win32(2)\pawno\life.pwn(209) : error 029: invalid expression, assumed zero<br>C:\Dokumente und Einstellungen\Flori\Eigene Dateien\Projeckte\samp022server.win32(2)\pawno\life.pwn(209) : error 004: function "OnPlayerSelectedMenuRow" is not implemented<br><br>Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase<br><br><br>26 Errors.<br><br><br>Ich bin noch Anfänger xD
Codeschnipsel, um Objekt Streamer zu testen, besonders wenn ihr einen eigenen macht nützlich. Yless hat hiermit auch seinen Objekt Streamer getestet.
1.000.000 Objekte Test:
for (new i = -3000; i < 3000; i += 6)
{
for (new j = -3000; j < 3000; j += 6)
{
CreateObject(1337, i, j, 10.0, 0.0, 0.0, 0.0);
}
}
#define MAX (3000)
for (new i = -MAX; i < MAX; i += 6)
{
for (new j = -MAX; j < MAX; j += 6)
{
CreateObject(1337, float(i), float(j), 10.0, 0.0, 0.0, 0.0);
}
}
Zum anschauen:
public OnPlayerCommandText(playerid, cmdtext[])
{
if( !strcmp(cmdtext, "/objects", true) )
{
SetPlayerPos(playerid,6,6,10);
SetPlayerInterior(playerid,0);
return 1;
}
return 1;
}
kann mir wer sagen was stock bedeutet ? Also was mir das bringt ?
Das "stock" vor einer Function ist nicht unbedingt notwendig, man kann es auch weglassen, das stock fügt praktisch automatisch ein
#pragma unused <function name>
ein.
D.h. die Funktion die du machst, verursacht keine Warnung wenn du sie nicht benutzt.
Das ist vor allem bei .inc Dateien nützlich, da dort meistens ein Haufen an Funktionen dem Benutzer bereitgestellt werden ohne dass dieser sie meistens alle nutzt, und das gäbe dann einen großen Haufen Warnungen die zwar keine Fehler verursachen aber natürlich die Compiler-Bericht-Box zuspammen würden.
Ontopic:
Hier ist eine kleine aber SEHR nützliche Funktion.
Mir zumindest gibt es ein gewisses Maß an Sicherheit... da ich leider schon sehr viel schlechte Erfahrung mit Skriptklau gemacht habe...
Diese Zeilen sollen verhindern, dass eure .amx Datei auf anderen Servern als eurem ausgeführt wird.
Credits für die Funktion gehen an Y_Less.
Benutzung:
Fügt den ganz unten aufgeführten Code ganz an den Anfang von "OnGameModeInit()" ein.
Ändert die "127.0.0.1" im Code in die IP eures Servers.
Fügt in eurer server.cfg diese Zeile ein:
bind 127.0.0.1
Auch hier natürlich die 127.0.0.1 in eure Server IP umändern.
Funktionsweise:
Dieses Skript macht nun folgendes:
Die SA-MP Entwickler haben die Funktion "bind <IP>" in die server.cfg eingefügt damit IP's auf einen Server festgelegt werden können...
Startet der Server mit "bind 128.0.0.1" hat aber die IP 127.0.0.1 bricht er den Start ab und meldet einen Fehler.
Normal kann dieser Befehl weggelassen werden. Hier aber kommt der Codeschnipsel ins Spiel.
Er überprüft ob die Server IP die in der server.cfg notiert wurde, mit der im Skript übereinstimmt.
Sollte dies nicht der Fall sein bannt er alle IP's vom Server und hängt ihn in einer Endlosschleife auf...
Diese Methode ist ziemlich sicher, die einzige Methode um jetzt noch an eine funktiontüchtige .amx zu kommen ist ein decompiler... welcher aber besonders mit großen Skripts heftige Probleme hat und so wirklich wertvolle große Skripts zu 99.99 % abgesichert sind.
Hier nun der Part der in den Anfang von "OnGameModeInit" kommt:
new
str[16];
GetServerVarAsString("bind", str, sizeof (str));
if (!str[0] || strcmp(str, "127.0.0.1", false))
{
SendRconCommand("banip *.*.*.*");
for( ; ; ) { }
}