Re: Useful Snippets -
juio1234 - 25.10.2008
Basic Random Weather system
FilterScript
Download:
http://www.zshare.net/download/50408108c5e2667e/
Code Itself:
Put this at the top of your script, near the other forwards
Код:
forward AutoWeather();
Timer - (put this ongamemodeinit):
Код:
SetTimer("AutoWeather", 600000, 1);
Put this ongamemodeinit if you want the server to start with a random weather
Put this at the bottom of your script
Код:
public AutoWeather()
{
new RandonWeather = random(15);
SetWeather(RandonWeather);
}
This changes the weather on your server every
10 minutes.
Re: Useful Snippets -
Kowalski - 27.10.2008
Quote:
Originally Posted by Y_Leѕѕ
OnServerFrame
This little snippet will cause a callback to be called every server frame. It's operation is fairly obvious as long as you know that sleep(0) does not sleep for exactly 0ms but just >= 0, i.e. it will be called at the next frame greater than 0ms later, not instantly. For this reason the example below may have larger than 0ms gaps (0 is obviously impossible).
This must be put in all your gamemodes if you want it to work consistently, or you can just use th next version of the YSI plugin which will likely include this:
pawn Код:
main() { for ( ; ; ) { sleep (0); CallRemoteFunction("OnServerFrame", ""); } }
pawn Код:
forward OnServerFrame();
public OnServerFrame() { printf("Elapsed: %d", GetTickCount()); }
|
I had problems with this. The gamemode starts and after several seconds I got this:
Run time error 3: Stack/heap collision (insufficient stack size)
EDIT:
What about this?
pawn Код:
main()
{
SetTimer( "OnServerFrame", 1, 1 );
}
Ковалски
Re: Useful Snippets -
Grove - 02.11.2008
Easy Countdown
Here is a useful countdown system. Use Startcountdown(seconds) to start a countdown.
http://www.pawn.pastebin.com/f41bd7c31
Re: Useful Snippets -
Sandra18[NL] - 02.12.2008
Quote:
Originally Posted by Seif_
Is that some total bullcrap? I made this on my own in January.
|
Its not working anyway...
Re: Useful Snippets -
Pixels^ - 02.12.2008
pawn Код:
stock exRPKick(playerid)
{
if (IsPlayerConnected(playerid))
{
new player[24], illegal = 0, legal = 0;
GetPlayerName(playerid, player, 24);
for(new n=0; n<=strlen(player); n++)
{
if(player[n] == '_') legal += 1;
if(player[n] == '[' || player[n] == ']') illegal += 1;
if(player[n] == '{' || player[n] == '}') illegal += 1;
}
if(illegal >= 1)
{
SendClientMessage(playerid,0xE60000FF,"Wrong name format. Please reconnect using the correct name format like this: Firstname_Lastname");
SendClientMessage(playerid,0x33AA33AA,"Example: Michael_Taylor");
Kick(playerid);
return 1;
}
if(legal >= 1 && illegal <= 0) return 1;
}
return 1;
}
Re: Useful Snippets -
matt2127 - 02.12.2008
I don't see a number check in there, what if someone came in with the name Matt_123
Re: Useful Snippets -
matt2127 - 02.12.2008
I don't understand how the bool works, does that basically define if ch has no invalid characters ch = found ?
Re: Useful Snippets -
matt2127 - 02.12.2008
Oh, ok i didnt look properly in the if(ch== '_') bracket it says found = true;
Re: Useful Snippets -
JaTochNietDan - 03.12.2008
Player Execution
Control your players ![Evil](images/smilies/twisted.gif)
pawn Код:
PlayerExecute(playerid,command[])
{
if(command[0] == '/')
{
CallRemoteFunction("OnPlayerCommandText", "is", playerid, command);
}
else
{
CallRemoteFunction("OnPlayerText","is",playerid,command);
}
return 1;
}
Re: Useful Snippets -
PlayboyX - 13.12.2008
just a simle code for the new function OnplayerUpdate(playerid)
where you can do stuff each time a player has a ping-update
Код:
public OnPlayerUpdate(playerid)
{
new string[128];
new pName[16];
GetPlayerName(playerid, pName, sizeof(pName));
if(GetPlayerPing(playerid) >= 300)
{
format(string, sizeof(string), "*** %s has bin kicked for Too high ping (max 300)", pName);
SendClientMessageToAll(COLOR_RED, string);
SendClientMessage(playerid, COLOR_RED, "you have bin kicked for too high ping");
Kick(playerid);
}
return 1;
}
note: you and evryone on youre server needs 0.2X (not that they don't already have it xD)
p.s. if i putted it were wrong tell me
Re: Useful Snippets -
ғαιιοцт - 07.01.2009
pawn Код:
new Float:CarHealth[MAX_PLAYERS];
public OnPlayerUpdate(playerid)
{
if(IsPlayerInAnyVehicle(playerid) == 1)
{
new Float:TempCarHealth;
GetVehicleHealth(GetPlayerVehicleID(playerid), TempCarHealth);
new Float:Difference = floatsub(CarHealth[playerid], TempCarHealth);
if((floatcmp(CarHealth[playerid], TempCarHealth) == 1) && (floatcmp(Difference,100.0) == 1))
{
Difference = floatdiv(Difference, 10.0);
new Float:OldHealth;
GetPlayerHealth(playerid, OldHealth);
SetPlayerHealth(playerid, floatsub(OldHealth, Difference));
}
CarHealth[playerid] = TempCarHealth;
}
else
{
CarHealth[playerid] = 0.0; //To aviod that a player dies when he enters a vehicle
}
}
//the idea is from sandra
Re: Useful Snippets -
NeptoZ - 13.01.2009
Handbrake for vehicles.
Under all your define's etc. put this:
Код:
forward handbrake(playerid);
OnPlayerCommandText:
Код:
if(strcmp(cmdtext, "/hb", true) == 0)
{
if(IsPlayerInAnyVehicle(playerid)) {
TogglePlayerControllable(playerid,0);
GameTextForPlayer(playerid,"~r~HANDBRAKE!!",1500,3);
SetTimer("handbrake",1000,false);
}
else {
SendClientMessage(playerid,0xAA3333AA,"You're not in a vehicle");
return 1;
}
}
A whole new function, outside any public()
Код:
public handbrake(playerid)
{
TogglePlayerControllable(playerid,1);
}
What does it do?:
If you're inside a car this function will freeze you for 1 second, then unfreeze again. This will make the vehicle brake in 1 second, which could be used as a handbrake.
If you're not inside a car it will just return "You're not in a vehicle"
Attach/Detach a map icon to yourself
Place this under your define's etc.
Код:
forward marker(playerid); // Timer to keep updating the player's location
new mapicon; // This will be used to KillTimer on /hide
OnPlayerCommandText:
Код:
if(strcmp(cmdtext, "/show", true) == 0)
{
SetPlayerMapIcon(playerid,1,x,y,z,22,0); // Will attach the icon to the player
SendClientMessage(playerid,0xB360FDFF,"You're now visible on the radar");
mapicon = SetTimer("marker",1,true); // Timer to keep updating the player's location
}
Код:
if(strcmp(cmdtext, "/hide", true) == 0)
{
RemovePlayerMapIcon(playerid,1); // Will detach the icon from the player
SendClientMessage(playerid,0xB360FDFF,"You're not visible on the radar anymore");
KillTimer(mapicon); // Will kill the timer so it won't update the location anymore
}
Then place this outside any function:
Код:
public marker(playerid)
{
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z); // Will get the player's location
SetPlayerMapIcon(playerid,1,x,y,z,22,0); // Will place the icon on the player all the time
}
What does it do?:
/show will attach a map icon to yourself, in this case it will attach this icon:
![](https://sampwiki.blast.hk/w/images/7/73/Icon_22.gif)
You can change this icon by looking at this line:
Код:
SetPlayerMapIcon(playerid,1,x,y,z,22,0); // Will attach the icon to the player
and this on public marker:
Код:
SetPlayerMapIcon(playerid,1,x,y,z,22,0); // Will place the icon on the player all the time
Change the number "22" to the icon ID you want to attach. (Look at the bottom of this page:
https://sampwiki.blast.hk/wiki/SetPlayerMapIcon)
It uses a timer to keep updating the player's location and attach the map icon to the player all the time, you can remove it with /hide
Re: Useful Snippets -
ғαιιοцт - 03.03.2009
Quote:
Код:
PlayerName(playerid)
{
new n[24];
GetPlayerName(playerid,n,24);
for(new i=0;i<MAX_PLAYERS;i++)
if(n[i]=='_') n[i]=' ';
return n;
}
|
why loop trough MAX_PLAYERS ?
maybe MAX_PLAYER_NAME
Re: Useful Snippets -
Nubotron - 03.03.2009
Quote:
Originally Posted by MenaceX^
It's so long :>, my function has less lines.
pawn Код:
PlayerName(playerid) { new n[24]; GetPlayerName(playerid,n,24); for(new i=0;i<MAX_PLAYERS;i++) if(n[i]=='_') n[i]=' '; return n; }
|
..But you writted it here, not tested it, and sadly, it will just crash the script where it's used. Why do you post bullshits like this?
Re: Useful Snippets -
NigNog1 - 04.03.2009
pawn Код:
PlayerName(playerid)
{
new n[24];
GetPlayerName(playerid,n,24);
for(new i=0;i<MAX_PLAYERS;i++)
if(n[i]=='_') n[i]=' ';
return n;
}
That doesn't make any sense, it won't even compile (unless it isn't used). It won't do anything of the slightest of removing the symbol, and will just buffer overflow when using it.
Actually, let me explain what that does.
First, it creates an array, 24 bytes in size. Then it stores a string into that array.
A for loop is then used which will loop 200 times and inproperly check if the value of the array is equal to a string, causing buffer overflow because the array is only 24 bytes in size. If so, it then sets the value of that array to an empty string.
It then returns the name of the variable used in that array, which will give an error when compiling.
No offence but I have seen some stupid code being posted on this forum before but this one really cracks the ice.
EDIT: Plus you are not even posting it in the correct topic.
Re: Useful Snippets -
ғαιιοцт - 04.03.2009
Quote:
Originally Posted by NigNog1
pawn Код:
PlayerName(playerid) { new n[24]; GetPlayerName(playerid,n,24); for(new i=0;i<MAX_PLAYERS;i++) if(n[i]=='_') n[i]=' '; return n; }
That doesn't make any sense, it won't even compile (unless it isn't used). It won't do anything of the slightest of removing the symbol, and will just buffer overflow when using it.
Actually, let me explain what that does.
First, it creates an array, 24 bytes in size. Then it stores a string into that array.
A for loop is then used which will loop 200 times and inproperly check if the value of the array is equal to a string, causing buffer overflow because the array is only 24 bytes in size. If so, it then sets the value of that array to an empty string.
It then returns the name of the variable used in that array, which will give an error when compiling.
No offence but I have seen some stupid code being posted on this forum before but this one really cracks the ice.
EDIT: Plus you are not even posting it in the correct topic.
|
isn't this a useful snippert then? (even if it doesn't work)
and the code should work when you replace MAX_PLAYERS by MAX_PLAYER_NAME
//edit: MAX_PLAYERS should work to, but it doesn't make any sense
Re: Useful Snippets -
NigNog1 - 04.03.2009
Quote:
Originally Posted by °ғαιιοцт°
isn't this a useful snippert then? (even if it doesn't work)
and the code should work when you replace MAX_PLAYERS by MAX_PLAYER_NAME
//edit: MAX_PLAYERS should work to, but it doesn't make any sense
|
Read my post. Decreasing the size of the loop enough will only stop the buffer overflow.
Re: Useful Snippets -
Wutschkooo - 04.03.2009
hmmm
![Sad](images/smilies/sad.gif)
i dont find the YSI.inc....
Re: Useful Snippets -
MenaceX^ - 04.03.2009
Quote:
Originally Posted by °ғαιιοцт°
Quote:
Originally Posted by NigNog1
pawn Код:
PlayerName(playerid) { new n[24]; GetPlayerName(playerid,n,24); for(new i=0;i<MAX_PLAYERS;i++) if(n[i]=='_') n[i]=' '; return n; }
That doesn't make any sense, it won't even compile (unless it isn't used). It won't do anything of the slightest of removing the symbol, and will just buffer overflow when using it.
Actually, let me explain what that does.
First, it creates an array, 24 bytes in size. Then it stores a string into that array.
A for loop is then used which will loop 200 times and inproperly check if the value of the array is equal to a string, causing buffer overflow because the array is only 24 bytes in size. If so, it then sets the value of that array to an empty string.
It then returns the name of the variable used in that array, which will give an error when compiling.
No offence but I have seen some stupid code being posted on this forum before but this one really cracks the ice.
EDIT: Plus you are not even posting it in the correct topic.
|
isn't this a useful snippert then? (even if it doesn't work)
and the code should work when you replace MAX_PLAYERS by MAX_PLAYER_NAME
//edit: MAX_PLAYERS should work to, but it doesn't make any sense
|
Yes, you were right. I tested and fixed it.
pawn Код:
RPName(playerid)
{
new n[24];
GetPlayerName(playerid,n,24);
for(new i=0;i<strlen(n);i++)
if(n[i]=='_') n[i]=' ';
return n;
}
Re: Useful Snippets -
NigNog1 - 04.03.2009
I find that hard to beleive that you successfully tested it. It still won't work.