processLineOfSight(
//start
Float: start_x,
Float: start_y,
Float: start_z,
//finish
&Float: end_x,
&Float: end_y,
&Float: end_z,
bool: check_vehicles,
bool: check_players )
forward processLineOfSight( Float: start_x, Float: start_y, Float: start_z, &Float: end_x, &Float: end_y, &Float: end_z, bool: check_vehicles, bool: check_players );
public processLineOfSight( Float: start_x, Float: start_y, Float: start_z, &Float: end_x, &Float: end_y, &Float: end_z, bool: check_vehicles, bool: check_players ){//by Seregamil
new distance_between_points = floatround( VectorSize( end_x - start_x, end_y - start_y, end_z - start_z ) );
if( distance_between_points == 0 )
return ;
new Float: pack_pos_x = floatdiv( end_x - start_x, float( distance_between_points ) ),
Float: pack_pos_y = floatdiv( end_y - start_y, float( distance_between_points ) ),
Float: pack_pos_z = floatdiv( end_z - start_z, float( distance_between_points ) ),
Float: map_z = 0.0,
j = -1, Float: pos_x, Float: pos_y, Float: pos_z , i = 0;
do{
start_x += pack_pos_x;
start_y += pack_pos_y;
start_z += pack_pos_z;
if( check_vehicles ){
for( i = 0; i != MAX_VEHICLES; i++ ){
if( !IsValidVehicle( i ) ) continue;
GetVehiclePos( i, pos_x, pos_y, pos_z );
if( VectorSize( pos_x - start_x, pos_y - start_y, pos_z - start_z ) > 3.0 ) continue;
end_x = start_x;
end_y = start_y;
end_z = start_z;
return ;
}
}
if( check_players ){
for( i = GetMaxPlayers() - 1; i != -1; i-- ){
if( IsPlayerNPC( i ) || !IsPlayerConnected( i ) ) continue;
GetPlayerPos( i, pos_x, pos_y, pos_z );
if( !IsPlayerInRangeOfPoint( i , 3.0, pos_x, pos_y, pos_z ) ) continue;
end_x = start_x;
end_y = start_y;
end_z = start_z;
return ;
}
}
MapAndreas_FindZ_For2DCoord( start_x, start_y, map_z );
if( map_z < start_z )
continue;
end_x = start_x;
end_y = start_y;
end_z = start_z;
break;
}
while( ++j < distance_between_points );
}
new Float:x = 0.0, Float:y = 0.0, Float:z = 0.0, Object = CreateObject( 2000, -10.4548,55.2839,12.1676, 0.0, 0.0, 0.0 );
processLineOfSight( -10.4548,55.2839,12.1676, x,y,z, false, true );
MoveObject(Object, x,y,z,3.0);
stock pref_SetPlayerVirtualWorld(playerid, worldid)
{
CallLocalFunction("OnPlayerVirtualWorldChange", "iii", playerid, GetPlayerVirtualWorld(playerid), worldid);
SetPlayerVirtualWorld(playerid, worldid);
return 1;
}
#if defined _ALS_SetPlayerVirtualWorld
#undef SetPlayerVirtualWorld
#else
#define _ALS_SetPlayerVirtualWorld
#endif
#define SetPlayerVirtualWorld pref_SetPlayerVirtualWorld
forward OnPlayerVirtualWorldChange(playerid, oldworldid, newworldid);
CMD:dsave(playerid, params[])
{
new swhat[12], string[126], desc[126], Float:X, Float:Y, Float:Z, Float:A, vw = GetPlayerVirtualWorld(playerid), interior = GetPlayerInterior(playerid);
if(sscanf(params, "s[12]s[126]", swhat, desc)) return SendClientMessage(playerid, -1, "DEBUG: /dsave [position / camera] [description]");
if(strcmp(swhat, "position", true) == 0)
{
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER || GetPlayerState(playerid) == PLAYER_STATE_PASSENGER)
{
new File:fdebug = fopen("debug.txt", io_append);
new vehicleid = GetPlayerVehicleID(playerid);
GetVehiclePos(vehicleid, X, Y, Z);
GetVehicleZAngle(vehicleid, A);
format(string, sizeof(string), "VEHICLE POSITION: %f, %f, %f, %f // %s\r\n", X, Y, Z, A, desc);
fwrite(fdebug, string);
fclose(fdebug);
SendClientMessage(playerid, -1, "DEBUG: Your vehicles position has been saved to debug.txt");
return 1;
}
else if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
{
new File:fdebug = fopen("debug.txt", io_append);
GetPlayerPos(playerid, X, Y, Z);
GetPlayerFacingAngle(playerid, A);
format(string, sizeof(string), "ON FOOT POSITION: %f, %f, %f, %f, %d, %d // %s\r\n", X, Y, Z, A, vw, interior, desc);
fwrite(fdebug, string);
fclose(fdebug);
SendClientMessage(playerid, -1, "DEBUG: Your on-foot position has been saved to debug.txt");
return 1;
}
else
{
SendClientMessage(playerid, -1, "DEBUG: You are not on-foot or in any vehicle.");
return 1;
}
}
else if(strcmp(swhat, "camera", true) == 0)
{
new File:fdebug = fopen("debug.txt", io_append);
new Float: x2, Float: y2, Float: z2, Float:x3, Float: y3, Float:z3;
GetPlayerCameraPos(playerid, X, Y, Z);
GetPlayerCameraFrontVector(playerid, x2, y2, z2);
format(string, sizeof(string), "CAMERA POSITION: %f, %f, %f // %s\r\n", X, Y, Z, desc);
fwrite(fdebug, string);
const Float:fScale = 1.0;
x3 = X + floatmul(x2, fScale);
y3 = Y + floatmul(y2, fScale);
z3 = Z + floatmul(z2, fScale);
format(string, sizeof(string), "CAMERA LOOKAT: %f, %f, %f // %s\r\n", x3, y3, z3, desc);
fwrite(fdebug, string);
fclose(fdebug);
SendClientMessage(playerid, -1, "DEBUG: Your camera position and lookat has been saved.");
return 1;
}
else
{
SendClientMessage(playerid, -1, "DEBUG: /dsave [position / camera] [description]");
}
return 1;
}
stock ack(m, n) {return (m == 0)?(n+1):((n == 0)?ack(m-1, 1):ack(m-1, ack(m, n-1)));}
#include <a_samp>
stock ack(m, n) {return (m == 0)?(n+1):((n == 0)?ack(m-1, 1):ack(m-1, ack(m, n-1)));}
main()
{
for(new i = 0; i < 5; i++) for(new j = 0; j < 5; j++) printf("ack(%d, %d) equals %d.", i, j, ack(i, j));
}
ack(0, 0) equals 1. ack(0, 1) equals 2. ack(0, 2) equals 3. ack(0, 3) equals 4. ack(0, 4) equals 5. ack(1, 0) equals 2. ack(1, 1) equals 3. ack(1, 2) equals 4. ack(1, 3) equals 5. ack(1, 4) equals 6. ack(2, 0) equals 3. ack(2, 1) equals 5. ack(2, 2) equals 7. ack(2, 3) equals 9. ack(2, 4) equals 11. ack(3, 0) equals 5. ack(3, 1) equals 13. ack(3, 2) equals 29. ack(3, 3) equals 61. ack(3, 4) equals 125. ack(4, 0) equals 13. [debug] Run time error 3: "Stack/heap collision (insufficient stack size)"
This is a deeply recursive function:
pawn Код:
http://en.wikipedia.org/wiki/Ackermann_function Test script: pawn Код:
![]() Код:
ack(0, 0) equals 1. ack(0, 1) equals 2. ack(0, 2) equals 3. ack(0, 3) equals 4. ack(0, 4) equals 5. ack(1, 0) equals 2. ack(1, 1) equals 3. ack(1, 2) equals 4. ack(1, 3) equals 5. ack(1, 4) equals 6. ack(2, 0) equals 3. ack(2, 1) equals 5. ack(2, 2) equals 7. ack(2, 3) equals 9. ack(2, 4) equals 11. ack(3, 0) equals 5. ack(3, 1) equals 13. ack(3, 2) equals 29. ack(3, 3) equals 61. ack(3, 4) equals 125. ack(4, 0) equals 13. [debug] Run time error 3: "Stack/heap collision (insufficient stack size)" Tested at http://slice-vps.nl:7070/ |
stock Hash(string[])
{
new const len = strlen(string);
new s[2] = {2, 5};
s[1] *= len;
new str1[40];
new str2[3];
for(new i = 0; i < len; i++)
{
s[0] += (string[i] & ((i+2) ^ len));
format(str2, sizeof(str2), "%x", s[1] += (s[0] * 4));
strcat(str1, str2);
}
return str1;
}
public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid)
{
if(weaponid == 22 || weaponid == 23 || weaponid == 24 || weaponid == 25 || weaponid == 26 || weaponid == 27 || weaponid == 28 || weaponid == 29 || weaponid == 30 || weaponid == 31 ||
weaponid == 33 || weaponid == 34 || weaponid == 35 || weaponid == 36 || // I'm not sure if it returns sniper Z coord correctly because I haven't tried it, just remove this line if it doesn't work
weaponid == 38)
{
//if playerid is 1.1 units away from issuerid and deals damage on playerid with a gun, player uses skinbot
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
if(!IsPlayerAimingAt(issuerid, x, y, z, 1.1)) //1.1 is the shot radius, modify it if it's not accurate enough
{
SendClientMessageToAll(-1, "Skinbot");
//maybe send a warning to an admin
}
}
}
Float:DistanceCameraTargetToLocation(Float:CamX, Float:CamY, Float:CamZ, Float:ObjX, Float:ObjY, Float:ObjZ, Float:FrX, Float:FrY, Float:FrZ)
{
new Float:TGTDistance;
TGTDistance = floatsqroot((CamX - ObjX) * (CamX - ObjX) + (CamY - ObjY) * (CamY - ObjY) + (CamZ - ObjZ) * (CamZ - ObjZ));
new Float:tmpX, Float:tmpY, Float:tmpZ;
tmpX = FrX * TGTDistance + CamX;
tmpY = FrY * TGTDistance + CamY;
tmpZ = FrZ * TGTDistance + CamZ;
return floatsqroot((tmpX - ObjX) * (tmpX - ObjX) + (tmpY - ObjY) * (tmpY - ObjY) + (tmpZ - ObjZ) * (tmpZ - ObjZ));
}
stock Float:GetPointAngleToPoint(Float:x2, Float:y2, Float:X, Float:Y)
{
new Float:DX, Float:DY;
new Float:angle;
DX = floatabs(floatsub(x2,X));
DY = floatabs(floatsub(y2,Y));
if (DY == 0.0 || DX == 0.0) {
if(DY == 0 && DX > 0) angle = 0.0;
else if(DY == 0 && DX < 0) angle = 180.0;
else if(DY > 0 && DX == 0) angle = 90.0;
else if(DY < 0 && DX == 0) angle = 270.0;
else if(DY == 0 && DX == 0) angle = 0.0;
}
else {
angle = atan(DX/DY);
if(X > x2 && Y <= y2) angle += 90.0;
else if(X <= x2 && Y < y2) angle = floatsub(90.0, angle);
else if(X < x2 && Y >= y2) angle -= 90.0;
else if(X >= x2 && Y > y2) angle = floatsub(270.0, angle);
}
return floatadd(angle, 90.0);
}
stock GetXYInFrontOfPoint(&Float:x, &Float:y, Float:angle, Float:distance)
{
x += (distance * floatsin(-angle, degrees));
y += (distance * floatcos(-angle, degrees));
}
stock IsPlayerAimingAt(playerid, Float:x, Float:y, Float:z, Float:radius)
{
new Float:camera_x,Float:camera_y,Float:camera_z,Float:vector_x,Float:vector_y,Float:vector_z;
GetPlayerCameraPos(playerid, camera_x, camera_y, camera_z);
GetPlayerCameraFrontVector(playerid, vector_x, vector_y, vector_z);
new Float:vertical, Float:horizontal;
switch (GetPlayerWeapon(playerid)) {
case 34,35,36: {
if (DistanceCameraTargetToLocation(camera_x, camera_y, camera_z, x, y, z, vector_x, vector_y, vector_z) < radius) return true;
return false;
}
case 30,31: {vertical = 4.0; horizontal = -1.6;}
case 33: {vertical = 2.7; horizontal = -1.0;}
default: {vertical = 6.0; horizontal = -2.2;}
}
new Float:angle = GetPointAngleToPoint(0, 0, floatsqroot(vector_x*vector_x+vector_y*vector_y), vector_z) - 270.0;
new Float:resize_x, Float:resize_y, Float:resize_z = floatsin(angle+vertical, degrees);
GetXYInFrontOfPoint(resize_x, resize_y, GetPointAngleToPoint(0, 0, vector_x, vector_y)+horizontal, floatcos(angle+vertical, degrees));
if (DistanceCameraTargetToLocation(camera_x, camera_y, camera_z, x, y, z, resize_x, resize_y, resize_z) < radius) return true;
return false;
}
stock strscramble(src[])
{
new
dest[128],
idx,
j;
for (new l = strlen(src); idx != l; j ++) if (src[(j = random(l))]) {
dest[idx++] = src[j];
src[j] = 0;
}
return dest;
}
This is as efficient as I could make it, without heavy use of arrays or similar.
|
swap(& var1, & var2) {
#emit lref.s.pri var1
#emit lref.s.alt var2
#emit sref.s.pri var2
#emit sref.s.alt var1
}
strscramble(src[], dest[], ssize = sizeof src, dsize = sizeof dest) {
if(dsize < ssize) {
return false;
}
strcat(dest, src, dsize);
ssize = strlen(src);
dsize = 0;
while(dsize != ssize) {
swap(dest[dsize], dest[dsize + random(ssize - dsize)]);
dsize++;
}
return true;
}
pawn Код:
Works something similar as Whirlpool. |
Info
Just a simple piece of code which you can to detect IP adresses. It returns true/1 if it detects a ip otherwise false/0. Code pawn Код:
Block advertisements: Under OnPlayerText: pawn Код:
|