Re: Useful Functions -
RyDeR` - 06.08.2010
Quote:
Originally Posted by ******
RyDeR` - may I suggest you read the code optimisations topic? There is a section in there on looping through strings, and one on loops in general (i.e. don't keep calling strlen in the second section of the loop):
Good:
pawn Код:
replaceChar(string[128], findchar, replacechar) { for(new i, j = strlen(string); i != j; ++i) { if(string[i] == findchar) string[i] = replacechar; } return string; }
Better:
pawn Код:
replaceChar(string[128], findchar, replacechar) { new i = 0; while (string[i]) { if (string[i] == findchar) string[i] = replacechar; ++i; } // Don't really need this as it modifies the string passed to the function. return string; }
|
Sure, I will read it. Nice way of doing this, thanks.
Will change my post.
Re: Useful Functions -
Daren_Jacobson - 07.08.2010
with this ReplaceChar thing, why is the string limited at 128?
Re: Useful Functions -
RyDeR` - 08.08.2010
Quote:
Originally Posted by Daren_Jacobson
with this ReplaceChar thing, why is the string limited at 128?
|
You can change it.. You know that right?
Re: Useful Functions -
Simon - 08.08.2010
I think he was wondering why you just didn't use an undetermined array size in your function definition (i.e. string[]). I believe the answer for that is that Pawn doesn't like unknown sized arrays being returned.
However, if you don't want to limit the string length then don't return an array and take advantage that arrays are always passed by reference in Pawn i.e the assignment in the function happens outside it also. The function could be modified for those who don't want the limit, but it would have to be used like GetPlayerName which means it couldn't be used 'like' a read-only variable.
****** already touched on this, so just remove the 'return' statement and remove the 128 from 'string[128]'.
Re: Useful Functions -
Hiddos - 08.08.2010
For removing the '_' thingies in name, like Firstname_Lastname becomes Firstname Lastname:
pawn Код:
stock RemUnderLine(name[MAX_PLAYER_NAME])
{
new UL = strfind(name, "_", true);
while(UL != -1)
{
name[UL] = ' ';
UL = strfind(name, "_", true);
}
return name;
}
Re: Useful Functions -
RyDeR` - 08.08.2010
Hiddos nice one but here an easier and faster version:
pawn Код:
new
pName[20]
;
GetPlayerName(playerid, pName, sizeof(pName));
pName[strfind(pName, "_")] = ' ';
// printf("%s", pName);
Re: Useful Functions -
Finn - 09.08.2010
Quote:
Originally Posted by RyDeR`
Hiddos nice one but here an easier and faster version:
pawn Код:
new pName[20] ; GetPlayerName(playerid, pName, sizeof(pName)); pName[strfind(pName, "_")] = ' '; // printf("%s", pName);
|
And when there isn't any underlines in the player's name and strfind returns -1?
Or if there are more than 1 underline in the name?
Hiddos' code is fine, except that he's using a function which loops through the string in a loop, so the script might loop through the string many times when only 1 loop would be enough:
pawn Код:
func(name[])
{
new i;
while(name[i])
{
if(name[i] == '_') name[i] = ' ';
i++;
}
return 1;
}
Re: Useful Functions -
(.Aztec); - 10.08.2010
Just some very simple functions I made.
SetMapName
Sets the server variable "mapname"
pawn Code:
forward SetMapName(mapName[]);
public SetMapName(mapName[])
{
new string[30];
format(string, sizeof(string), "mapname %s", mapName);
SendRconCommand(string);
return 1;
}
SetHostName
Sets the server variable "hostname"
pawn Code:
forward SetHostName(hostName[]);
public SetHostName(hostName[])
{
new string[30];
format(string, sizeof(string), "hostname %s", hostName);
SendRconCommand(string);
return 1;
}
SetServerURL
Sets the server variable "weburl"
pawn Code:
forward SetServerURL(url[]);
public SetServerURL(url[])
{
new string[30];
format(string, sizeof(string), "weburl %s", url);
SendRconCommand(string);
return 1;
}
ReturnPlayerName
Returns the player name without an underscore.
pawn Code:
stock ReturnPlayerName(playerid)
{
var1="Invalid_Player_ID";
if(IsPlayerConnected(playerid))
{
GetPlayerName(playerid, var1, sizeof(var1));
for(new i = 0; i < sizeof(var1); i++)
{ if(var1[i] == \'_\') { var1[i] = \' \'; } }
}
return var1;
}
EDIT: Looks as if Hiddos beat me to it, but oh well, i\'ll keep this anyway.
Re: Useful Functions -
Lorenc_ - 11.08.2010
SetMapIcon
Set its the map icon for everyone. I hope it works, it might not work, I mean im not very sure its untested
heres the code:
Код:
stock SetMapIcon(iconid, Float:x, Float:y, Float:z, markertype)
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
SetPlayerMapIcon(i, iconid, x, y, z, markertype, 0);
}
}
}
kthxbai
Re: Useful Functions -
_[HuN]_Epsilon_ - 11.08.2010
pawn Код:
stock replacestring(str[], const find[],const finish[])
{
#define MAXLEN 128
new start = strfind(str,find);
do
{
new end = start+strlen(find);
strdel(str,start,end);
strins(str,finish,start,MAXLEN);
start = strfind(str,find);
} while(start != -1);
return str;
}
This is my own function wich replaces a string to an other string in a string
Example:
pawn Код:
new str[128] = "This is a facked string to censore!";
print(str);
replacestring(str,"facked","[censored]");
print(str);
Will output
Код:
This is a facked string to censore!
This is a [censored] string to censore!
Re: Useful Functions -
Lorenc_ - 12.08.2010
Sweet function Epsilon
Re: Useful Functions -
Claude - 13.08.2010
pawn Код:
stock TeleportPlayerToPlayer(player, player2);
{
new Float:pos[3];
GetPlayerPos(player2, pos[0], pos[1], pos[2]);
if(IsPlayerInAnyVehicle(player)) SetVehiclePos(GetPlayerVehicleID(player), pos[0], pos[1], pos[3];
else SetPlayerPos(player, pos[0]+1, pos[1]-1, pos[3]+2);
return 1;
}
For example:
TeleportPlayerToPlayer(0, 1);
Ingame it will be:
ID 0 will be teleported to ID 1, this is my first own made function so please don't be rude
Re: Useful Functions -
Blantas - 14.08.2010
Only 0.3b function
pawn Код:
stock GetPlayerSwimmingStyle(playerid)
{
new animname[32];
GetAnimationName(GetPlayerAnimationIndex(playerid),animname,32,animname,32);
if( strfind(animname,"Swim_Breast",true) != -1 ) return 1;
else if( strfind(animname,"SWIM_crawl",true) != -1 ) return 2;
else if( strfind(animname,"Swim_Dive_Under",true) != -1 ) return 3;
else if( strfind(animname,"Swim_Glide",true) != -1 ) return 4;
else if( strfind(animname,"Swim_Tread",true) != -1 ) return 5;
else if( strfind(animname,"Swim_Under",true) != -1 ) return 6;
return 0;
}
Re: Useful Functions -
ipsBruno - 14.08.2010
Quote:
Originally Posted by RyDeR`
Hiddos nice one but here an easier and faster version:
pawn Код:
new pName[20] ; GetPlayerName(playerid, pName, sizeof(pName)); pName[strfind(pName, "_")] = ' '; // printf("%s", pName);
|
@Ryder
pawn Код:
new pName[24];//MAX Caracters in Name is 24 no 20... (Correct (MAX_PLAYER_NAME))
GetPlayerName(playerid, pName,24);//Otimize (no called Function sizeof)
for(new i = 0, j = strlen(pName); i <= j; ++ i)//Otimize (no function called multiple times)
if(pName[i] == '_') pName[i] = ' ';//Otimize (No Use called function strfind)
//SetPlayerName(playerid,pName); // Optional
//printf("%s", pName);// Optional
TEST
DraKoN_S > DraKoN S
@Finn
Use instead of While, Loop
Re: Useful Functions -
Carlton - 14.08.2010
Quote:
Originally Posted by DraKoN
@Ryder
pawn Код:
new pName[24];//MAX Caracters in Name is 24 no 20... (Correct (MAX_PLAYER_NAME)) GetPlayerName(playerid, pName,24);//Otimize (no called Function sizeof) for(new i = 0, j = strlen(pName); i <= j; ++ i)//Otimize (no function called multiple times) if(pName[i] == '_') pName[i] = ' ';//Otimize (No Use called function strfind) //SetPlayerName(playerid,pName); // Optional //printf("%s", pName);// Optional
@Finn
Use instead of While, Loop
TEST
DraKoN_S > DraKoN S
¬¬
|
https://sampwiki.blast.hk/wiki/Strfind - Read how strfind works & returns, RyDer is correct.
A while and for loop do the same exact thing. Except it's broken up into pieces, if you notice a for loop, you'll see me setting the variables inside the parenthesis. If you notice a while loop, you will see i'm not, but just setting the variable outside and increasing it inside the brackets, just like a for loop does. Example:
pawn Код:
new i;
while(i < MAX_PLAYERS) {
i++;
}
pawn Код:
for(new i; i < MAX_PLAYERS; i++ ) {
}
Re: Useful Functions -
ipsBruno - 14.08.2010
@CarltonTheGG
Yes I know
Ryder the if purpose not work code does
Ryder_DraKoN_CarltonTheGG
Output
Ryder DraKoN_CarltonTheGG
Not everything goes
My code works well.. (more is slower 4x..,LoL)
Time of Functions:
Ryder 0.39 Milesceconds
My 0.129 Milesceconds
_______________________________
#MyCode
pawn Код:
#define replaceonecar(%1,%2,%3)\
for(new i = 0, j = strlen(%1); i <= j; ++ i)\
if(%1[i] == '%2')\
%1[i] = '%3';
Example:
pawn Код:
replaceonecar(string,D,O);//Use
Output:
DraKoN ->
OraKoN
Re: Useful Functions -
RyDeR` - 14.08.2010
OMG, I know. I was going out that a RP name always gets checked for one underscore when you join and that's the reason why I didn't use a loop to check all underscores. Secondly the same story again, a RP name (always) mostly has an underscore and that's the reason I didn't do something when it returns -1.
Re: Useful Functions -
ipsBruno - 14.08.2010
Yes, indeed most often is '_', more is always excesses, LoL
Re: Useful Functions -
CJ101 - 15.08.2010
This will return in what range a file size is in.. supports Bytes, KB, MB, and GB...
Код:
GetFileSizeInBytes(file[])
{
if(!fexist(file)) return 0;
new t;
new kb,mb,fl;
new File:raw;
raw = fopen(file);
fl = flength(raw);
mb = 1073741824/fl;
kb = 1024/fl;
if(fl > 1024 && fl < 1048576)
{
return 1; // 1 = file is in KB
}
if(fl >= 1048576)
{
return 2; // 2 = file is in MB
}
if(fl >= 1073741824)
{
return 3; // 3 = file is in GB
}
return 4;
}
Re: Useful Functions -
Scream[SM] - 15.08.2010
Some codes by
me.
Television Head:
Код:
if(!strcmp("/tv-head", cmdtext, true)) return SetPlayerHoldingObject(playerid, 1518, 15, 0, 0, 0.3);
Remove the TV Head:
Код:
if(!strcmp("/tvhead-off", cmdtext, true)) return StopPlayerHoldingObject(playerid);
Nationality code:
Код:
public SetPlayerNameWithCountry(playerid, country[]);
public SetPlayerNameWithCountry(playerid, country[])
{
new string[128], playername[16];
GetPlayerName(playerid, playername, 16);
format(string, 128, "[%s]%s", country, playername);
SetPlayerName(playerid, string);
return 1;
}
Example for this:
Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
if(!strcmp("/im-hungarian", cmdtext, true)) return SetPlayerNameWithCountry(playerid, "HUN");
return 0;
}
IV-MP Messages
A little code, for IV-MP fans.
Код:
stock SendPlayerMessage(playerid, msg[], color = 0xFFFFFFAA) return SendClientMessage(playerid, color, msg);
stock SendMessageToAll(msg[], color = 0xFFFFFFAA) return SendClientMessageToAll(color, msg);
Example for this:
Код:
SendPlayerMessage(playerid, "This is an white message! :D");
or
Код:
SendPlayerMessage(playerid, "This is a lightblue message! :D", 0x33CCFFAA);
Good fun with there functions!