Welcome, Guest
You have to register before you can post on our site.

Username
  

Password
  





Search Forums



(Advanced Search)

Forum Statistics
» Members: 7,024
» Latest member: Armeat2005
» Forum threads: 2,349
» Forum posts: 12,235

Full Statistics

Online Users
There are currently 240 online users.
» 0 Member(s) | 237 Guest(s)
Bing, Google, Twitter

Latest Threads
DOF2.1 (DOF2 Updated)
Forum: Libraries
Last Post: GracieStith
3 hours ago
» Replies: 1
» Views: 846
Kontak Layanan CIMB Niaga...
Forum: Support
Last Post: bosquee9053
Yesterday, 03:44 PM
» Replies: 0
» Views: 16
CS Bank DBS Customer Cent...
Forum: Chat
Last Post: bosquee9053
Yesterday, 03:37 PM
» Replies: 0
» Views: 18
Sponsors and Donations
Forum: Questions and Suggestions
Last Post: NoxxeR
Yesterday, 05:48 AM
» Replies: 0
» Views: 28
I know Kalcor left the bu...
Forum: Questions and Suggestions
Last Post: NoxxeR
Yesterday, 05:40 AM
» Replies: 2
» Views: 68
Best practices for conver...
Forum: Tech
Last Post: Mido
2025-04-19, 09:53 PM
» Replies: 1
» Views: 81
A simple suggestion as a ...
Forum: Questions and Suggestions
Last Post: Mido
2025-04-19, 09:47 PM
» Replies: 1
» Views: 39
Steps to unlock Apple ID ...
Forum: Tech
Last Post: fubolink
2025-04-17, 03:50 PM
» Replies: 0
» Views: 39
What got you into SA-MP a...
Forum: Chat
Last Post: alecnia
2025-04-17, 01:17 AM
» Replies: 1
» Views: 150
I would like to know abou...
Forum: General Discussions
Last Post: Wriney
2025-04-15, 07:14 AM
» Replies: 0
» Views: 63

 
  #emit, __emit, @emit
Posted by: Y_Less - 2022-09-18, 01:12 PM - Forum: Tutorials - No Replies

Between the latest versions of the compiler and the amx_assembly library, there are now three versions of emit - #emit, __emit, and @emit.? They all have subtly different uses and quirks, and these differences are explained here.



#emit



This is the original version, and is used to insert assembly (p-code) in to a script directly, exactly at the point it is used.? For example:



pawn Wrote:Function()

{

? ? #emit ZERO.pri

? ? #emit RETN

? ? return 1;

}



This function will be compiled with two return instructions - one from RETN and one from return, and the second one will never be hit.? The generated assembly will look something like:



asm Wrote:PROC

ZERO.pri

RETN

CONST.pri 1

RETN



This is the most inflexible version - it just puts exactly what you typed exactly where you typed it.



It is also in a very strange part of the compiler, likely because it was only originally intended for basic debugging of the pawn VM (hence why it was removed in later official releases).? It uses barely any of the standard compiler features:



pawn Wrote:#emit CONST.pri 5 // This works.

#emit CONST.pri -5 // This is a syntax error.



Thus you will often see negative numbers written in their full hex representation (for some reason hex does work despite the fact that negative numbers don?t):



pawn Wrote:#emit CONST.pri 0xFFFFFFFB // -5



Defines don?t work to abstract that, but const does:



pawn Wrote:#define MINUS_5 0xFFFFFFFB

#emit CONST.pri MINUS_5 // Undefined symbol `MINUS_5`



pawn Wrote:const MINUS_5 = -5;

#emit CONST.pri MINUS_5 // Fine.



And #if is completely ignored:



pawn Wrote:#if TEST

? ? #emit CONST.pri 5

#else

? ? #emit CONST.pri 6

#endif



Very unhelpfully generates:



asm Wrote:CONST.pri 5

CONST.pri 6



Both branches are used, so you will often see functions with assembly at the end of a file, ommitted with #endinput:



pawn Wrote:#if !TEST

? ? #endinput

#endif



Func()

{

? ? #emit CONST.pri 5

}



Or in a separate file altogether.



In short #emit is very weird, but everything else has been built from it so there?s a lot to thank it for.



__emit



This is #emit, but super-powered.? It is a full expression-level version of #emit correctly integrated in to the compiler.? That means you can use full compile-time expressions:



pawn Wrote:__emit(CONST.pri (5 * MAX_PLAYERS));



You can use it in defines:



pawn Wrote:#define GetCurrentAddress() __emit(LCTRL 6)



And you can use it in expressions:



pawn Wrote:new var = __emit(CONST.pri 6);



Where the register pri is always the result of __emit returned like a normal expression.? Compared to the old version:



pawn Wrote:new var = 0;

#emit CONST.pri 6

#emit STOR.S.pri var



It also adds .U, which tries to work out which instruction to use based on the parameter.? For example with #emit incrementing a global variable is:



pawn Wrote:#emit INC var



While incrementing a local variable is:



pawn Wrote:#emit INC.S var



With __emit these become:



pawn Wrote:__emit(INC.U var);



And the compiler works out which instruction to use based on the scope of var.



There is more that __emit can do, like including multiple instructions in one expression:



pawn Wrote:new var = __emit(LOAD.S.pri param, ADD.C 5); // new var = param 5;



But it is still fundamentally the same as #emit in one important way - it is done at compile-time by the compiler.? Everything is inserted in to the AMX at a fixed location (bearing in mind that macros can change this location).



@emit



This is a macro, and purely a run-time operation.? The simplest way to see what it does is to remove the macro itself and look at the underlying function calls.? A context is created, which includes an address in the AMX, and instructions are written to that address one-by-one while the server is running.? This is a very easy way to write self-modifying code:



pawn Wrote:ReturnFive()

{

? ? // Wrong value!

? ? return 3;

}



public OnCodeInit()

{

? ? // Create the context.

? ? new context[AsmContext];



? ? // Initialise the context to point to a function.

? ? AsmInitPtr(context, _:addressof (ReturnFive<>), 4 * cellbytes);



This code creates a context, points it to the given function to rewrite it, and makes the buffer big enough to hold four cells.? Note that this code is in OnCodeInit, which is a special callback called before the mode starts, and before the JIT plugin compiles the mode.? All code rewriting must be done before JIT initialisation.? Note also that because OnCodeInit is called so early you can?t use most useful YSI features like hook and foreach - it too is generating its own code at this point.? We then rewrite the function at that address in assembly:



pawn Wrote:? ? // A function starts with `PROC`.

? ? AsmEmitProc(context);



? ? // Then load the correct return value in to `pri`.

? ? AsmEmitConstPri(context, 5);



? ? // And end the function.

? ? AsmEmitRetn(context);



? ? return 1;

}



@emit is just a clever macro that wraps all of these confusing function calls.? While they are fundamentally how code is rewritten at run-time, there?s a lot of boilerplate there that obscures what code is being generated.? So if we call the context ctx (this is important as it is hard-coded in to the macros).? The @emit macro is something like:



pawn Wrote:#define @emit%0%1 AsmEmit%0(ctx, %1);



It isn?t exactly that, because that?s not a valid macro, but it shows what is happening.? Thus the code becomes:



pawn Wrote:ReturnFive()

{

? ? // Wrong value!

? ? return 3;

}



public OnCodeInit()

{

? ? // Create the context.

? ? new ctx[AsmContext];



? ? // Initialise the context to point to a function.

? ? AsmInitPtr(ctx, _:addressof (ReturnFive<>), 4 * cellbytes);



? ? // A function starts with `PROC`.

? ? @emit PROC



? ? // Then load the correct return value in to `pri`.

? ? @emit CONST.pri 5



? ? // And end the function.

? ? @emit RETN



? ? return 1;

}



So if you see @emit look around for ctx and that?s where the instructions are being written to in memory.? You can also use labels, but if you want to use variables in the generated code, and not to generate the code, you need to explicitly get their address:



pawn Wrote:// return var ? 0 : 1;

@emit LOAD.S.pri ref(var)

@emit JZER.label failure

@emit CONST.pri 0

@emit RETN

@emit failure:

@emit CONST.pri 1

@emit RETN


  possible to create a folder inside scriptfiles?
Posted by: mems - 2022-09-12, 01:12 PM - Forum: Pawn Scripting - Replies (3)

hello,



title possibly explains exactly what i want. i'm looking to make a function that checks if there is a specific named folder on the scriptfiles folder. if there isn't, then it simply creates that folder. tried searching for a library that could help me but apart from filemanager which probably also doesn't do what i'm asking for i couldn't find anything else. grateful if anyone helps!


  SA-MP 0.3DL compatibility plus other added features and bug fixes - SERVER BETA RELEA
Posted by: Potassium - 2022-09-08, 09:26 AM - Forum: Development Updates - No Replies

Posted in our Discord server announcements channel by kseny (discord.gg/samp)



Hello everyone



We have just released open.mp server beta 9, fixing several reported issues and adding several new features. The most notable change being - SA:MP 0.3DL support. You can now run 0.3.7 and 0.3.DL compatible servers from the same binary!



Other Changes


  • Dynamic tick rate. Specify a target tickrate, rather than a fixed sleep time.

    - Use the tickrate console command to set the rate

    - sleep can now be a float to accomodate precise tick rates.
  • More plugin compatibility - fsutil, Discord connector (only with non static build)

  • SetSpawnInfo return fixed.

  • Fix weather and time not resetting after GMX.

  • Fix various GMX bugs.

  • Fix various console commands.

  • Fix GetPlayerClass.

  • Fix GetVehicleLastDriver.

  • Add GetVehicles native.

  • Add GetPlayers native.

  • Add GetActors native.

  • All lagcomp modes are now available through config.

  • Fix trailer sync.

  • Fix GetVehicleLastDriver.

  • Fix GetPlayerRotationQuat.

  • Fix crash in vehicle component.






SA:MP DL





This is the big news obviously, and comes with a whole host of new settings:


  • Implemented all DL natives and callbacks (AddSimpleModel, AddSimpleModelTimed, GetPlayerCustomSkin, OnPlayerFinishedDownloading, OnPlayerRequestDownload):

    - RedirectDownload native and OnPlayerRequestDownload callback are now deprecated in favour of CDN config options.

  • Add artwork.enable (legacy: useartwork) config option.

  • Add artwork.models_path (legacy: artpath) config option.

    - Server can load custom models from artconfig.txt file like SA:MP does.

  • 0.3.7 compatibility is preserved and can be configured by network.allow_037_clients config option (true by default).

  • open.mp server comes now with a built in webserver used to serve custom models

    - Webserver is using open.mp server bind address and port. Please allow TCP connections on your port in firewall if you plan to use it.- If your public IP address is different than bind address (ex: you're behind a router) you'll need to set it in network.public_addr config option.


Notes


  • Due to few changes old config.json files may not work properly. Please use ./omp-server --default-config to generate a new one

  • server.cfg users are not affected.

  • While allowing 0.3.7 connections only 1000 objects can be created

  • open.mp server now provides two types of Linux builds, standard and static. You are encouraged to use the standard build if possible, it will minimize incompatibilities with various plugins; however, it will require openssl 1.1 installed on your system. If you can't install modern openssl on your system (typically if it's very old), you can use the static build, but some plugins or components might fail to load and crash the server.


Official Includes



Preparing a full release is not just having a working server, but all the other peripherals as well - libraries, tools, documentation, and more. On the pawn side open.mp is a significant upgrade, with many QoL improvements already seen through fixes and new functions, and more to come. A big part of this push is more compiler diagnostics to find code problems ahead of time, mostly through more tags and const-correctness. While the offical versions aren't out yet you can still help in the meantime by testing your code with the following includes and tools:



https://github.com/pawn-lang/samp-stdlib...y-overhaul?

https://github.com/pawn-lang/pawn-stdlib...ed-natives?

https://github.com/openmultiplayer/upgrade?

https://github.com/pawn-lang/compiler



These were originally developed to improve the default SA:MP includes, but never fully released (i.e. never merged to master, despite the PR being accepted). The open.mp includes build on the foundation established here so think of these as a stepping-stone to full open.mp tag and const safety; and important feedback on their direction. See the links above for far more information and documentation on upgrading.



As ever, if you don't want to upgrade old code and includes will still work (at least for the first release).


  optimize the code?
Posted by: nbx2000 - 2022-08-07, 07:44 PM - Forum: Pawn Scripting - No Replies

You can improve this script or leave it like this
#include <a_samp>

#define? TIME? ? ? ? ? ? 1? //When the contest will start (Minutes)
#define? PRIZE? ? 3000 //Reward ($$$) when win in Math Contest
#define? PRIZESCORE? ? ? 5? //Reward (Score) when win in Math Contest

new answer;
new endm = 0;
new no1, no2, no3;
new typem = -1;
new timermath;
new timermath2;
new str[128];

forward Math();
forward MathEnd();

#define COLOR_YELLOW? ? 0xFFFF00FF

#define white? ? ? ? ? ? "{FFFFFF}"
#define red? ? ? ? ? ? ? "{FF002B}"
#define orange? ? ? ? ? "{F2C80C}"

#define FILTERSCRIPT
#if defined FILTERSCRIPT

public OnFilterScriptInit()
{
print("\n");
print("* Math System by BuzZ *");
print("* Loaded *");
print("\n");
typem = -1;
endm = 0;
timermath = SetTimer("Math", 1000*60*TIME, true);
return 1;
}

public OnFilterScriptExit()
{
print("\n");
print("* Math System by BuzZ *");
print("* Unloaded *");
print("\n");
typem = -1;
endm = 0;
KillTimer(timermath);
return 1;
}

#endif

public Math()
{
typem = random(2);
no1 = random(600);
no2 = random(50);
no3 = random(100);

endm = 1;
switch(typem)
{
case 0:
{
? ? answer = no1 no2 no3;
format(str, sizeof(str), "MATH: "white"The first one who answers (solve) this "red"%d%d%d "orange"wins $3,000 5 score", no1, no2, no3);
SendClientMessageToAll(COLOR_YELLOW, str);
}
case 1:
{
answer = no1 - no2 - no3;
format(str, sizeof(str), "MATH: "white"The first one who answers (solve) this "red"%d-%d-%d "orange"wins $3,000 5 score", no1, no2, no3);
SendClientMessageToAll(COLOR_YELLOW, str);
}
case 2:
{
answer = no1 * no2 * no3;
format(str, sizeof(str), "MATH: "white"The first one who answers (solve) this "red"%dx%dx%d "orange"wins $3,000 5 score", no1, no2, no3);
SendClientMessageToAll(COLOR_YELLOW, str);
}
}
SendClientMessageToAll(-1, "Math will end on 30 seconds!");
timermath2 = SetTimer("MathEnd", 1000*30, false);
return 1;
}

public MathEnd()
{
switch(typem)
{
case 0:
{
format(str, sizeof(str), "MATH: "white"No one won the Math Contest the answer is '%d'", answer);
SendClientMessageToAll(COLOR_YELLOW, str);
}
case 1:
{
format(str, sizeof(str), "MATH: "white"No one won the Math Contest the answer is '%d'", answer);
SendClientMessageToAll(COLOR_YELLOW, str);
}
case 2:
{
format(str, sizeof(str), "MATH: "white"No one won the Math Contest the answer is '%d'", answer);
SendClientMessageToAll(COLOR_YELLOW, str);
}
}
endm = 0;
KillTimer(timermath2);
return 1;
}

public OnPlayerText(playerid, text[])
{
if(strval(text) == answer && endm == 1)
{
? ? format(str, sizeof(str), "MATH: %s(%d) won the Math Contest, He/She won the $%d %i score [ Answer: %d ]", GetName(playerid), playerid, PRIZE, PRIZESCORE, answer);
? ? SendClientMessageToAll(COLOR_YELLOW, str);
? ? GivePlayerMoney(playerid, PRIZE);
? ? SetPlayerScore(playerid, GetPlayerScore(playerid) PRIZESCORE);
? ? KillTimer(timermath2);
? ? endm = 0;
? ? return 0;
}
return 1;
}

You can improve this script or leave it like this? ??


  goto label
Posted by: claudespeed - 2022-07-29, 11:36 PM - Forum: Pawn Scripting - No Replies

//SOLVED


Lightbulb Fusez's Map Editor (Version 3) [Dynamic Categories] [Improved] [Best of Version 1&2 C
Posted by: fusez - 2022-07-19, 07:30 PM - Forum: Filterscripts - Replies (2)

[Image: GXbn2ba.png]

Version 3?GitHub?Page


Question [MySQL] Problema con registro de datos
Posted by: GARS - 2022-07-19, 05:47 PM - Forum: Programaci?n - Replies (2)

Hola, tengo un problema con MySQL al registrar nuevos datos, mi servidor era SQLite y lo pase a MySQL pero al registrar un nuevo dato (registrar cuenta) en la base de datos esta no me figura/registra la el ID de forma ascendiente, me explico, en la tabla solo me registra como ID 0, as?:



[Image: 2UtuvbC.png]



Y cuando quiero volver a registrar otros datos(cuenta) no registra.



Ac? como est? la DB:





Code:
CREATE TABLE `cuenta` (

? `ID` int(11) NOT NULL,

? `IP` varchar(16) DEFAULT NULL,

? `NAME` varchar(24) DEFAULT NULL,

? `EMAIL` varchar(32) DEFAULT NULL,

? `PASS` varchar(65) DEFAULT NULL,

? `CONNECTED` int(11) NOT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8;



ALTER TABLE `cuenta`



? ADD PRIMARY KEY (`ID`);



Y en la gamemode as?



Code:
RegisterNP(playerid)

{

new DB_Query[500];

format(DB_Query, sizeof DB_Query,

"\

INSERT INTO `CUENTA`\

(\

`IP`, `NAME`, `EMAIL`, `PASS`, `CONNECTED`\

)\

VALUES\

(\

'%q', '%q', '%q', '%q', '1'\

);\

", INFO_AC[playerid][iac_IP], INFO_AC[playerid][iac_NAME], INFO_AC[playerid][iac_EMAIL], INFO_AC[playerid][iac_PASS]);

mysql_tquery(DATABASE, DB_Query, "LoadRegisterNP", "i", playerid);

return 1;

}


  My suggestions [Update: 2022-07-06]
Posted by: Radical - 2022-07-02, 11:07 PM - Forum: Questions and Suggestions - Replies (1)

Objects & PlayerObjects:

PHP Code:
SetObjectSize(objectidFloatfXFloatfYFloatfZ);

SetPlayerObjectSize(objectidFloatfXFloatfYFloatfZ);

GetObjectSize(objectid, &FloatfX, &FloatfY, &FloatfZ);

GetPlayerObjectSize(objectid, &FloatfX, &FloatfY, &FloatfZ); 



Textdraws & PlayerTextDraws:

PHP Code:
TextDrawFont(Text:textfontface[]); //Able to use any font in TextDraw

PlayerTextDrawFont(playeridPlayerText:text,?fontface[]);



TextDrawRotateText(Text:textFloat:rotate);

PlayerTextDrawRotateText(playeridPlayerText:textFloat:rotate);



Make it possible to add a new txd and player download it when connect to the server. [../omp server/models/txd]

(
Like samp 0.3.DL download skin character files from server) (https://ibb.co/R2qgXLJ)



Add color gradient textdraws



Keys:

PHP Code:
Supporting all?Keys.

if (
newkeys == 0x41// 'A' key 



File functions:

PHP Code:
Reading a directory in scriptfiles.

readdir(...); 



Players:

PHP Code:
ReconnectPlayer(playeriddelay=0);

TogglePlayerHUD(playeridtoggle); //Show/Hide game hud

TogglePlayerChat(playeridtoggle); //Show/Hide chats

ForcePlayerTakeScreenShot(playerid);

BurnPlayer(playerid);

TogglePlayerInvulnerable(playeridtoggle);

ReloadPlayerArmedWeapon(playerid);

RemoveWeaponFromPlayer(playeridweaponid);



PlayerDeathListShow(playerid);

PlayerDeathListHide(playerid);

PlayerDeathListPos(playeridFloat:XFloat:Y);



SetPlayerFpsLimit(playeridamount); // /fpslimit (30 to 90)

GetPlayerFpsLimit(playerid);

SetPlayerFontSize(playeridsize); //Chat font size /fontsize (-3 to 5)

GetPlayerFontSize(playerid);

SetPlayerPageSize(playeridsize); // /pagesize (10 to 20)

GetPlayerPageSize(playerid);

TogglePlayerHeadMove(playeridtoggle); // /headmove

TogglePlayerDebugLabels(playeridtoggle); // /dl

TogglePlayerTimestamp(playeridtoggle); // /timestamp

TogglePlayerAudioMsg(playeridtoggle); // /audiomsg

QuitPlayer(playerid); // /quit



TogglePlayerFirstPerson(playeridtoggle);

TogglePlayerIronFist(playeridtoggle);

TogglePlayerInfiniteRun(playeridtoggle);

SetPlayerMapMarkPos(playerid,?Float:xFloat:y,?Float:z); //Red mark on map

GetPlayerMapMarkPos(playerid,?&Float:x,?&Float:y,?&Float:z);

GetPlayerBreathBar(playerid, &Float:amount); //Blue bar that appears on breathing underwater (idk what to name this func)

TogglePlayerSeaWaves(playeridtoggle); //Toggle 0 = The sea does not wave and the water?are smooth 



Damage:

PHP Code:
OnPlayerTakeDamage(...);

OnPlayerGiveDamage(...);

- If 
returns 0prevent player from health loss.



Add new weaponid supportsWEAPON_HYDRAWEAPON_HUNTERWEAPON_SEASPAROWWEAPON_BARRONWEAPON_RUSTLER.



-?
It would be nice to add all weapon-config?functions like SetWeaponDamage() to omp.



- If 
the player jumps from a height and dies , return last player who damage him. (On OnPlayerDeath



Player HUD:

PHP Code:
Change game hud?position:

HUD_HealthPos(playeridFloat:XFloat:Y);

HUD_ArmourPos(playeridFloat:XFloat:Y);

HUD_BreathBarPos(playeridFloat:XFloat:Y);

HUD_WantedPos(playeridFloat:XFloat:Y);

HUD_MoneyPos(playeridFloat:XFloat:Y);

HUD_TimePos(playeridFloat:XFloat:Y);

HUD_WeaponPos(playeridFloat:XFloat:Y);

HUD_MiniMapPos(playerid,?Float:XFloat:Y);



Show/Hide game hud:

HUD_HealthToggle(playeridtoggle);

HUD_ArmourToggle(playeridtoggle);

HUD_BreathBarToggle(playeridtoggle);

HUD_WantedToggle(playeridtoggle);

HUD_MoneyToggle(playeridtoggle);

HUD_TimeToggle(playeridtoggle);

HUD_WeaponToggle(playeridtoggle);

HUD_MiniMapToggle(playeridtoggle); 



Audio Stream:

PHP Code:
PlayAudioStreamForPlayerEx(playeridurl[], play_from_second 0,?Float:posX 0.0Float:posY 0.0Float:posZ 0.0Float:distance 50.0usepos 0); //Play audio from a specific second

PauseAudioStreamForPlayer(playerid);

ResumeAudioStreamForPlayer(playerid);

UpdateAudioStreamPosForPlayer(playeridFloat:posX 0.0,?Float:posY?= 0.0Float:posZ 0.0); //If positions is 0.0?consider to player pos

GetPlayerAudioStreamUrl(playerid, &dest[], len sizeof dest);

GetPlayerAudioStreamCurrentTime(playerid);?//Return in seconds

GetPlayerAudioStreamPos(playerid, &Float:posX, &Float:posY, &Float:posZ);

GetPlayerAudioStreamDistance(playerid, &Float:distance);

IsPlayerAudioStreamPaused(playerid);

GetAudioStreamUrlLength(url[]);?//Return in seconds 



Vehicles:

PHP Code:
ToggleVehicleInvulnerable(vehicleidtoggle);

SetVehicleSpeed(vehicleidFloat:speed);

Float:GetVehicleSpeed(vehicleid);



ToggleVehicleShoot(vehicleidtoggle); //Disable Hydra/Hunter/Rustler/SeaSparrow shooting

ToggleVehicleLightBars(vehicleidtoggle); //Police vehicles or Ambulance vehicles?

ToggleVehicleBlowFuelTank(vehicleidtoggle); //In gta sa offline you able to blow vehicle?by shooting at fuel tank.

FlipVehicle(vehicleid); //new Float:angle;?GetVehicleZAngle(vehicleid, angle),?SetVehicleZAngle(vehicleid, angle); 



Actors:

PHP Code:
SetActorArmedWeapon(actoridweaponid);

GetActorArmedWeapon(actorid); 



Validation:
PHP Code:
IsValidWeaponID(weaponid);

IsValidVehicleModel(modelid);

IsPositionInWater(FloatxFloatyFloatz);

IsVehicleOverturned(vehicleid);

IsPlayerAFK(playerid); //or IsPlayerPaused(playerid);

IsPlayerWalking(playerid); //W  ALT

IsPlayerRunning(playerid); //W  Space

IsPlayerStanding(playerid);

IsPlayerInvulnerable(playerid);

IsVehicleInvulnerable(vehicleid); 



Strings:

PHP Code:
IsNumeric(string[]);

IsDigit(string[]);

IsSpace(string[]);

IsLower(string[]);

IsUpper(string[]);

StrReplace(oldvalue[], newvalue[], &dest[], len sizeof dest);

StrCpy(dest[], source[]);

StrCapitalize(string[], &dest[], len sizeof dest); //First character to upper case 



Server:

PHP Code:
GetServerIP(); //Server?public IP address

GetServerPing(); 



Socket:

PHP Code:
Add TCP UDP connections and functions



Fixes:

PHP Code:
RemoveBuildingForPlayer(...); // It crashes game if number of removes is above 1000



Enable tear gas coughing effect/animAlso return amount of damage in OnPlayerTakeDamage.



When a vehicle dies then respawned the ID was changeID should not change.



Head bleeding with headshotanimation deleted from sa-mp. Return it.



OnPlayerWeaponShoot(...); //Doesn't work in lagcompmode 0



When player press TAB key the server textdraws are hide



Telegram: t.me/adib_yg

Discord: Adib#5980


  Weapon-config.inc no damage
Posted by: yukie - 2022-06-20, 03:17 PM - Forum: Pawn Scripting - No Replies

Is there any other way to fix this on weapon-config, because there's no damage on my server


Information [Work in progress] TextDraw Editor (online)
Posted by: Leonardo - 2022-06-12, 09:00 AM - Forum: Releases - Replies (3)

TextDraw Editor



A TextDraw Editor built in Vanilla JS



Work in progress!! For more information, visit the github repository.



Preview



[Image: 2fQfySy.jpg]



Source code



https://github.com/Leonardo541/TextDrawEditor



Demo at



https://leonardo541.github.io/TextDrawEditor/