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

Username
  

Password
  





Search Forums



(Advanced Search)

Forum Statistics
» Members: 7,705
» Latest member: technosmedianews
» Forum threads: 2,356
» Forum posts: 12,303

Full Statistics

Online Users
There are currently 420 online users.
» 0 Member(s) | 417 Guest(s)
Bing, Google, Discord

Latest Threads
Client issue with object
Forum: Support
Last Post: TheDoctor
2025-11-15, 08:00 PM
» Replies: 0
» Views: 53
San Andreas Police Pursui...
Forum: Advertisements
Last Post: BriBri
2025-11-15, 12:06 AM
» Replies: 0
» Views: 58
[Include] OpenGate (Abrir...
Forum: Portuguese/Portugu?s
Last Post: Crazy_ArKzX
2025-11-13, 06:49 PM
» Replies: 0
» Views: 51
OpenGate (Open Proximity ...
Forum: Libraries
Last Post: Crazy_ArKzX
2025-11-13, 06:46 PM
» Replies: 0
» Views: 65
LS City Hall
Forum: Maps
Last Post: cosminupgaming
2025-11-12, 04:22 PM
» Replies: 3
» Views: 2,691
Crime Base
Forum: Maps
Last Post: cosminupgaming
2025-11-12, 04:19 PM
» Replies: 2
» Views: 1,265
GTA SA-MP Scripting: Issu...
Forum: General Discussions
Last Post: williamrhein
2025-11-12, 10:16 AM
» Replies: 0
» Views: 81
is it worth creating a se...
Forum: General Discussions
Last Post: cosminupgaming
2025-11-11, 05:30 PM
» Replies: 13
» Views: 18,401
Looking for an English De...
Forum: General Discussions
Last Post: cosminupgaming
2025-11-11, 05:21 PM
» Replies: 2
» Views: 2,833
Awakeninga an old server.
Forum: Support
Last Post: drwnrbbt
2025-11-11, 02:26 PM
» Replies: 0
» Views: 73

 
  Estonian/Eesti keel
Posted by: kristo - 2019-04-13, 10:49 PM - Forum: Other - Replies (22)

tere


Information Secci?n en espa?ol - Bienvenida
Posted by: Graber - 2019-04-13, 10:44 PM - Forum: Spanish/Espa?ol - Replies (43)

Este es el foro burgershot.gg, naci? como una comunidad de jugadores de SA-MP que despues de ciertas acciones desafortunadas del foro de SA-MP por parte de Kalcor, decidieron abrir su propio espacio en donde pasar el rato, conversar y chatear sin restricciones rid?culas. Les recuerdo que YouTube no est? bloqueado aqu?. De momento, con los eventos dados tambi?n se ha vuelto en un lugar en donde vamos a discutir el proyecto open.mp en gran parte, asi que est?n atentos!

Pero no se limiten a solo eso, son bienvenidos de chatear cualquier cosa aqui y hacer conversa de lo que piensen relacionado a SA-MP! Puede ser relacionado a SA-MP, a otros juegos, a servidores (sin publicitar explicitamente), basicamente lo que deseen! Aca tendr?n su propio espacio de discusi?n, sin censura, para tener la comunidad de jugadores centrada en un solo lugar.

Bienvenidos!

Un poco de explicaci?n adicional:

open.mp es el proyecto que se est? llevando a cabo. Por el momento estamos terminando la primera parte: El sofwtare de servidor. Tiene muchas fallas ya conocidas de SA-MP corregidas y, aunque no esta completado al 100%, ya hay prototipos funcionando y se espera que los due?os de servidores se vayan pasando poco a poco. Luego de eso, vendra el cliente, y con el, actualizaciones con nuevas funciones para sacarle el jugo a GTA San Andreas Multiplayer.

A continuaci?n, les dejo el post original de Y_Less, el lider del proyecto, traducido al espa?ol. Saludos!

(2019-04-13, 04:01 PM)Y_Less Wrote: Tiempo para mi lado de la historia, o eso creo. Todos est?n parcialmente en lo cierto, pero no en las formas en que pueden pensar. No estoy tratando de dividir a la comunidad, no estoy tratando de iniciar un rival para SA:MP, y un punto secundario importante: no estoy robando el c?digo de nadie. Todos ustedes piensan que el gato est? fuera de la bolsa debido a que una publicaci?n mal redactada perdi? todo el contexto de la conversaci?n de la que era parte. Le ech? un vistazo a la bolsa y piensa que todo es est?pido, lo cual es comprensible dada la falta de informaci?n. Estaba tratando de dar los puntos importantes sin revelar demasiados detalles, desafortunadamente eso fue contraproducente porque ahora solo tienes la mitad de una historia para sacar conclusiones.

As? que vamos a ponerlo todo por ah?.
  • No estoy tratando de dividir a la comunidad. Sin embargo, alguien est? tratando de destruirlo: ha acumulado informaci?n, ha ocultado actualizaciones buscadas durante mucho tiempo, ha amenazado con eliminar todos los foros (la semana pasada) y ha prohibido a cualquiera que diga que tal vez eso no sea bueno. Esta persona ya ha dividido a la comunidad, lanzando dos versiones paralelas separadas del mod, y luego se pregunta por qu? la aceptaci?n de una no fue tan completa como se hab?a previsto originalmente. Durante m?s de un a?o, las personas han pedido que se fusionen 0.3.7 y 0.3DL, mientras que ?l se qued? all? sentado y se pregunt? si realmente hab?a alguien que lo deseara. Dijo que cree que la comunidad se est? muriendo, SA:MP se est? muriendo y solo le queda uno o dos a?os; y se contenta con solo verlo pasar. Algunos de nosotros no estamos de acuerdo y hemos tratado de convencerlo de que haga algo, ya sea continuar o pasar las riendas. La reducci?n de la comunidad es probablemente inevitable, pero solo morir? si no se la apoya, y eso es lo que est? sucediendo en este momento.

    Hay un Discord no oficial, donde s?, las personas a veces se divierten y bromean entre s?. Pero no fue fundada como un lugar para la rebeli?n. Lleg? a ser porque a la gente le gustaba SA:MP, y la gente usa Discord, por lo que la comunidad naturalmente quer?a combinar ambas cosas. Hay un foro no oficial, el mismo Kalcor ha dicho previamente que si no te gustan estos, crea los tuyos, pero ahora proh?be los que s? lo hacen. Sin embargo, ni los foros ni la discordia est?n a cargo de m?. Son simplemente el resultado de que las ?reas oficiales no logran avanzar. Eso no es divisi?n, eso est? progresando.

  • No estoy tratando de empezar un rival para SA:MP. Dos de las palabras incorrectas son "empezar" y "rival". No estoy "empezando" nada, estaba tratando de medir un mayor inter?s en un proyecto en marcha. Estos son los commits del a?o pasado:

    [Image: JGgR39R.png]

    No hay nada nuevo sobre esto, entonces, ?qu? es esto? ?Y por qu? no es un rival?

  • Una vez me fui de SA:MP, s?, pero eso fue hace 6 a?os, ?superalo!

No estoy traicionando a SA:MP, y no estoy traicionando a Kalcor; ?l es el que traicion? a SA:MP, pero la mayor?a de las personas no pueden separar a los dos. S?, ?l lo fund?, pero eso no lo hace suyo. Cientos de otras personas han pasado incontables horas / d?as / semanas / A?OS trabajando en esto, convirti?ndolo en lo que es hoy, pero solo porque Kalcor tiene acceso exclusivo a una peque?a parte: el c?digo del servidor, ?l cree que es la parte m?s importante y Puede dictar a d?nde va y cu?ndo se detiene. Al principio, s?, hizo la mayor parte del trabajo, pero preg?ntese a s? mismo qui?n cree honestamente que ha hecho m?s por esta modificaci?n en los ?ltimos a?os: Kalcor o cualquiera de estas personas:

[Image: IZYZXhB.png]

No queremos usurparlo, no queremos menospreciarlo o sus contribuciones. Fund? este mod, involucr? a la gente, pero todas esas otras personas lo ayudaron a llevarlo a donde est? hoy, y son esas personas, la comunidad, quienes est?n siendo reprimidos e ignorados. Trat? de actuar como mediador, aportando los puntos de vista de Kalcor a las personas y los puntos de vista de la comunidad, y he recibido cr?ticas interminables de ambos lados por ello. Tambi?n he intentado repetidamente que Kalcor pase el desarollo del mod a otra persona (no necesariamente a m?, pero no hay nadie m?s que se haga cargo). ?Cu?les fueron las respuestas?
  • ?l no cree que sea capaz de agregar nuevas caracter?sticas importantes. Por supuesto, ?l tampoco est? agregando ninguno, y en realidad no cree que haya ninguno que agregar, as? que, ?por qu? importar?a eso?
  • Quer?a un plan. Mis prioridades principales fueron corregir errores, mejorar las brechas obvias en la API y crear una mejor plataforma para otros idiomas, es decir, una API C / plugin adecuada. Ni siquiera las tareas dif?ciles y las que he demostrado m?s de lo que soy capaz de hacer. Pero al parecer eso no califica como plan.
  • En sus palabras exactamente "no lo merecen". Eso es lo que ?l piensa de esta comunidad que aparentemente yo soy la que intenta separarse, y la idea de que alguien intente continuar.

A nadie le importa si quiere dejar de fumar, eso es claramente obvio y perfectamente natural. Nos oponemos a que se lleve todo lo dem?s con ?l. Esta es una comunidad, es una gran comunidad con muchos amigos muy buenos desde hace mucho tiempo, centrada en un mod de fuente cercana con un l?der controlador paranoico. Queremos mover este centro, eso es todo. No queremos destruir a SA:MP, no queremos dividir a la comunidad (esto se descubri? porque estaba tratando de involucrar a la comunidad rusa ignorada durante mucho tiempo, por lo tanto, volver a la gente ya dividida), queremos asegurar su continuaci?n, porque Kalcor no lo hace.

As? que les doy:

open.mp

Ese es el proyecto (y el dominio, los foros de Burgershot fueron solo temporales hasta que conseguimos el verdadero, que a?n no ha sucedido). Un equipo de VEINTE Y DOS de las mejores personas del multijugador de San Andr?s: propietarios de servidores, programadores de scripts, evaluadores y otros l?deres de la comunidad que trabajan juntos para recrear todo esto desde cero. Hacer un nuevo foro es f?cil; Lo que siempre ciment? el control de Kalcor fue su ?nico acceso a la fuente mod. Hay una versi?n filtrada, pero desde el principio dej? absolutamente claro que tomar?amos el camino correcto a este respecto y nos negar?amos a usarlo de cualquier manera. As? que hemos estado reimplementando todo desde cero. Originalmente quer?amos lanzar una versi?n 1.0 completamente de la nada, y ese anuncio fue el primero que se enter?, pero eso no va a suceder ahora. Pero no est? muy lejos.

Ha habido bifurcaciones, pero tuvieron dos problemas principales: 1) Utilizaron el c?digo robado, algo que nosotros no, y 2) Intentaron reinventar la rueda, nuevos lenguajes de scripting, funciones totalmente diferentes, etc. esta totalmente compatible con versiones anteriores. Puedes cambiar tu servidor al nuestro, ejecutando el mismo script, y tus jugadores ni siquiera lo notar?n. Por supuesto, hay planes para nuevas caracter?sticas y mejoras a lo largo del tiempo, pero por ahora el enfoque est? en la compatibilidad con versiones anteriores, la estabilidad y la soluci?n de errores (las correcciones que nosotros, como comunidad, ya hemos hecho antes porque Kalcor no lo har?a).

Durante m?s de un a?o me esforc? mucho para trabajar CON Kalcor en la mejora de SA:MP, simplemente tuve un plan de respaldo. As? que puedes seguir con ?l si crees que su enfoque est? a punto de cambiar y de repente se producir?n actualizaciones (y si esta debacle lo obliga, entonces, en realidad, logramos el objetivo original). O puede seguir con la mayor?a de la comunidad, quienes saben que hay un problema y quieren solucionarlo, aquellos que han estado a su disposici?n a trav?s de todo esto, ayudando, ense?ando, hospedando y liderando.

Depende de ustedes decidir qui?n cree que ha traicionado a SA:MP ... Ustedes saben d?nde encontrarnos.


  Modern GPS plugin
Posted by: kristo - 2019-04-13, 10:27 PM - Forum: Plugins - Replies (10)

SA-MP GPS Plugin



[Image: sampctl-samp--gps--plugin-2f2f2f.svg?sty...-the-badge]



This plugin offers a way of accessing and manipulating the data of San Andreas map nodes and finding paths between them. It is intended to be a modern and straightforward replacement for RouteConnector. The plugin uses a simple implementation of the A* algorithm for pathfinding. Finding a path from the top-leftmost node on the map to the bottom-rightmost node that consists of 684 nodes takes just a few milliseconds. It is worth noting that this is my first successful project in C and the last time I tried writing something in C was over half a year ago so there is a lot of room for improvement and I am planning to continue improving the code of this plugin as I progress.



Advantages over RouteConnector


  • Safer API - Unlike RouteConnector, this plugins does not give you an array of nodes as the result of pathfinding. Instead of that, it gives you the ID of the found path that can be used later on. Each function (except IsValidMapNode, IsValidPath and GetHighestMapNodeID) returns an error code and the real result of them is passed by reference.

  • Compatibility - RouteConnector has a compatibility issue with some part of YSI that makes it call a wrong public function instead of the actual GPS_WhenRouteIsCalculated callback. This plugin lets you call a custom callback and pass arguments to it. In addition to that, RouteConnector uses Intel Threading Building Blocks for threading that has caused numerous compatibility (and PEBCAK) issues on Linux servers. This plugin uses std::thread for threading and does not have any dependencies. This plugin is also compatible with PawnPlus and supports asynchronous pathfinding out of box.

  • Active development - RouteConnector has not been updated for over three years. As I said previously, I am planning to continue active development of this plugin for a long period of time.

  • Performance - I have not done any benchmarks, but even with older versions users claimed that this plugin is multiple times faster than RouteConnector. A fix in the algorithm in version 1.2.0 made it around 30 times faster than it previously was.




Installation



Simply install to your project:



Code:
sampctl package install kristoisberg/samp-gps-plugin



Include in your code and begin using the library:



PHP Code:
#include <GPS> 



API



Functions



CreateMapNode(Float:x, Float:y, Float:z, &MapNode:nodeid)


  • Adds a node to the map and passes the ID of it to nodeid.




DestroyMapNode(MapNode:nodeid)


  • If the specified map node is valid, returns GPS_ERROR_NONE and tries to destroy it, otherwise returns GPS_ERROR_INVALID_NODE. If the node is not a part of any path, it gets destroyed immediately, otherwise it will be destroyed once all paths containing it are destroyed, until that it will be excluded from pathfinding and several other features.




bool:IsValidMapNode(MapNode:nodeid)


  • Returns if the map node with the specified ID is valid.




GetMapNodePos(MapNode:nodeid, &Float:x, &Float:y, &Float:z)


  • If the specified map node is valid, returns GPS_ERROR_NONE and passes the position of it to x, y and z, otherwise returns GPS_ERROR_INVALID_NODE.




CreateConnection(MapNode:source, MapNode:target, &Connection:connectionid)


  • If both specified map nodes are valid, returns GPS_ERROR_NONE, creates a connection from source to target and passes the ID of it to connectionid, otherwise returns GPS_ERROR_INVALID_NODE. Note: Connections are not double-sided may need to be added in both directions separately.




DestroyConnection(Connection:connectionid)


  • If the specified connection is valid, returns GPS_ERROR_NONE and destroys it, otherwise returns GPS_ERROR_INVALID_CONNECTION.




GetConnectionSource(Connection:connectionid, &MapNode:nodeid)


  • If the specified connection is valid, returns GPS_ERROR_NONE and passes the ID of the source node of it to nodeid, otherwise returns GPS_ERROR_INVALID_CONNECTION.




GetConnectionTarget(Connection:connectionid, &MapNode:nodeid)


  • If the specified connection is valid, returns GPS_ERROR_NONE and passes the ID of the target node of it to nodeid, otherwise returns GPS_ERROR_INVALID_CONNECTION.




GetMapNodeConnectionCount(MapNode:nodeid, &count)


  • If the specified map node is valid, returns GPS_ERROR_NONE and passes the amount of its connections to count, otherwise returns GPS_ERROR_INVALID_NODE. If count is larger than 2, the node is an intersection.




GetMapNodeConnection(MapNode:nodeid, index, &Connection:connectionid)


  • If the specified map node is valid and it has a connection with the specified index, returns GPS_ERROR_NONE and passes the ID of the connection to connectionid, otherwise returns GPS_ERROR_INVALID_NODE or GPS_ERROR_INVALID_CONNECTION depending on the error.




GetConnectionBetweenMapNodes(MapNode:source, MapNode:target, &Connection:connectionid)


  • If both specified map nodes are valid, tries to find a connection from source to target. If a connection is found, returns GPS_ERROR_NONE and passes the ID of the connection to connectionid, otherwise returns GPS_ERROR_INVALID_CONNECTION. If either of the specified map nodes is invalid, returns GPS_ERROR_INVALID_NODE.




GetDistanceBetweenMapNodes(MapNode:first, MapNode:second, &Float:distance)


  • If both of the specified map nodes are valid, returns GPS_ERROR_NONE and passes the distance between them to distance, otherwise returns GPS_ERROR_INVALID_NODE.




GetAngleBetweenMapNodes(MapNode:first, MapNode:second, &Float:angle)


  • If both of the specified map nodes are valid, returns GPS_ERROR_NONE and passes the angle between them to angle, otherwise returns GPS_ERROR_INVALID_NODE.




GetMapNodeDistanceFromPoint(MapNode:nodeid, Float:x, Float:y, Float:z, &Float:distance)


  • If the specified map node is valid, returns GPS_ERROR_NONE and passes the distance of the map node from the specified position to distance, otherwise returns GPS_ERROR_INVALID_NODE.




GetMapNodeAngleFromPoint(MapNode:nodeid, Float:x, Float:y, &Float:angle)


  • If the specified map node is valid, returns GPS_ERROR_NONE and passes the angle of the map node from the specified position to angle, otherwise returns GPS_ERROR_INVALID_NODE.




GetClosestMapNodeToPoint(Float:x, Float:y, Float:z, &MapNode:nodeid, MapNode:ignorednode = INVALID_MAP_NODE_ID)


  • Passes the ID of the closest map node to the specified position to nodeid. If ignorednode is specified and it is the closest node to the position, it is ignored and the ID of the next closest node is passed to nodeid instead. Returns GPS_ERROR_INVALID_NODE if no nodes exist, otherwise returns GPS_ERROR_NONE.




GetHighestMapNodeID()


  • Returns the ID of the map node with the highest ID. Could be used for iteration purposes.




GetRandomMapNode(&MapNode:nodeid)


  • Passes the ID of a random map node, found using Mersenne Twister, to nodeid. Returns GPS_ERROR_INVALID_NODE if no map nodes exist, otherwise returns GPS_ERROR_NONE.




SaveMapNodesToFile(const filename[])


  • Saves all existing nodes and their connections to a file with the specified name.




FindPath(MapNode:source, MapNode:target, &Path:pathid)


  • If both of the specified map nodes are valid, returns GPS_ERROR_NONE and tries to find a path from source to target and pass its ID to pathid, otherwise returns GPS_ERROR_INVALID_NODE. If pathfinding fails, returns GPS_ERROR_INVALID_PATH.




FindPathThreaded(MapNode:source, MapNode:target, const callback[], const format[] = "", {Float, _}:...)


  • If both of the specified map nodes are valid, returns GPS_ERROR_NONE and tries to find a path from source to target. After pathfinding is finished, calls the specified callback and passes the path ID (could be INVALID_PATH_ID if pathfinding fails) and the specified arguments to it.




Task:FindPathAsync(MapNode:source, MapNode:target)


  • Pauses the current function and continues it after it is finished. Throws an AMX error if pathfinding fails for any reason. Only available if PawnPlus is included before GPS. Usage explained below.




bool:IsValidPath(Path:pathid)


  • Returns if the path with the specified ID is valid.




GetPathSize(Path:pathid, &size)


  • If the specified path is valid, returns GPS_ERROR_NONE and passes the amount of nodes in it to size, otherwise returns GPS_ERROR_INVALID_PATH.




GetPathNode(Path:pathid, index, &MapNode:nodeid)


  • If the specified path is valid and the index contains a node, returns GPS_ERROR_NONE and passes the ID of the node at that index to nodeid, otherwise returns GPS_ERROR_INVALID_PATH or GPS_ERROR_INVALID_NODE depending on the error.




GetPathNodeIndex(Path:pathid, MapNode:nodeid, &index)


  • If the specified path is valid and the specified map node is a part of the path, returns GPS_ERROR_NONE and passes the index of the map node to index, otherwise returns GPS_ERROR_INVALID_PATH or GPS_ERROR_INVALID_NODE depending on the error.




GetPathLength(Path:pathid, &Float:length)


  • If the specified path is valid, returns GPS_ERROR_NONE and passes the length of the path in metres to length, otherwise returns GPS_ERROR_INVALID_PATH.




DestroyPath(Path:pathid)


  • If the specified path is valid, returns GPS_ERROR_NONE and destroys the path, otherwise returns GPS_ERROR_INVALID_PATH.




Error codes


  • GPS_ERROR_NONE - The function was executed successfully.

  • GPS_ERROR_INVALID_PARAMS - An invalid amount of arguments was passed to the function. Should never happen without the PAWN compiler noticing it unless the versions of the plugin and include are different.

  • GPS_ERROR_INVALID_PATH - An invalid path ID as passed to the function or threaded pathfinding was not successful.

  • GPS_ERROR_INVALID_NODE - An invalid map node ID/index was passed to the function or GetClosestMapNodeToPoint or GetRandomMapNode failed because no map nodes exist.

  • GPS_ERROR_INVALID_CONNECTION - An invalid connection ID/index was passed to the function.

  • GPS_ERROR_INTERNAL - An internal error happened - threaded pathfinding failed because dispatching a thread failed.




Examples



Threaded pathfinding



Finding a path from the position of the player to the LSPD building.



PHP Code:
CMD:pathtols(playerid) {

? ?new 
Float:xFloat:yFloat:zMapNode:start;

? ?
GetPlayerPos(playeridxyz);



? ?if (
GetClosestMapNodeToPoint(xyzstart) != GPS_ERROR_NODE) {

? ? ? ?return 
SendClientMessage(playeridCOLOR_RED"Finding a node near you failed, GPS.dat was not loaded.");

? ?}



? ?new 
MapNode:target;



? ?if (
GetClosestMapNodeToPoint(1258.7352, -2036.710059.4561target)) { // this is also valid since the value of GPS_ERROR_NODE is 0.

? ? ? ?return SendClientMessage(playeridCOLOR_RED"Finding a node near LSPD failed, GPS.dat was not loaded.");

? ?}



? ?if (
FindPathThreaded(starttarget"OnPathToLSFound""ii"playeridGetTickCount())) {

? ? ? ?return 
SendClientMessage(playeridCOLOR_RED"Pathfinding failed for some reason, you should store this error code and print it out since there are multiple ways it could fail.");

? ?}



? ?
SendClientMessage(playeridCOLOR_WHITE"Finding the path...");

? ?return 
1;

}





forward public OnPathToLSFound(Path:pathidplayeridstart_time);

public 
OnPathToLSFound(Path:pathidplayeridstart_time) {

? ?if (!
IsValidPath(pathid)) {

? ? ? ?return 
SendClientMessage(playeridCOLOR_RED"Pathfinding failed!");

? ?}



? ?new 
string[128], sizelength;

? ?
GetPathSize(size);

? ?
GetPathLength(length);



? ?
format(stringsizeof(string), "Found a path in %ims. Amount of nodes: %i, length: %fm."GetTickCount() - start_timesizelength);



? ?new 
MapNode:nodeidFloat:xFloat:yFloat:z;



? ?for (new 
indexindex sizeindex) {

? ? ? ?
GetPathNode(pathidindexnodeid);

? ? ? ?
GetMapNodePos(nodeidxyz);

? ? ? ?
CreateDynamicPickup(13181xyz);

? ?}



? ?
DestroyPath(pathid);

? ?return 
1;





Asynchronous pathfinding



What if you could continue the process within the command while still taking advantage of the benefits of threaded pathfinding? You can, using the magic of PawnPlus tasks.



PHP Code:
CMD:pathtols(playerid) {

? ?new 
Float:xFloat:yFloat:zMapNode:start;

? ?
GetPlayerPos(playeridxyz);



? ?if (
GetClosestMapNodeToPoint(xyzstart)) {

? ? ? ?return 
SendClientMessage(playeridCOLOR_RED"Finding a node near you failed, GPS.dat was not loaded.");

? ?}



? ?new 
MapNode:target;



? ?if (
GetClosestMapNodeToPoint(1258.7352, -2036.710059.4561target)) { 

? ? ? ?return 
SendClientMessage(playeridCOLOR_RED"Finding a node near LSPD failed, GPS.dat was not loaded.");

? ?}



? ?
SendClientMessage(playeridCOLOR_WHITE"Finding the path...");



? ?new 
Path:pathid task_await(FindPathAsync(starttarget)); // no error handling here, an AMX error will be thrown instead if the pathfinding fails



? ?new string[128], sizelength;

? ?
GetPathSize(size);

? ?
GetPathLength(length);



? ?
format(stringsizeof(string), "Found a path in %ims. Amount of nodes: %i, length: %fm."GetTickCount() - start_timesizelength);



? ?new 
MapNode:nodeidFloat:xFloat:yFloat:zindex;



? ?while (!
GetPathNode(pathidindexnodeid)) // also note the alternative method of iterating through path nodes here

? ? ? ?GetMapNodePos(nodeidxyz);

? ? ? ?
CreateDynamicPickup(13181xyz);



? ? ? ?
index;

? ?}



? ?
DestroyPath(pathid);

? ?return 
1;





Testing



To test, simply run the package:



Code:
sampctl package run



Credits


  • kvann - Creator of the plugin.

  • Gamer_Z - Creator of the original RouteConnector plugin which helped me understand the structure of GPS.dat and influenced this plugin a lot, the author of the original GPS.dat.

  • NaS - Author of the fixed GPS.dat distributed with the plugin.

  • Southclaws, IllidanS4, Hual - Helped me with the plugin in major ways (there were other helpful people as well, I appreciate it all).


  Suggestion: Spanish Section
Posted by: Shaggy - 2019-04-13, 10:23 PM - Forum: Chat - Replies (7)

Can u please open the spanish section? Many people of our speech will pass here, and it's good to share ideas for people who can not read English. Just that, greetings!


  Suggestion for the forum
Posted by: LaszloR1 - 2019-04-13, 09:53 PM - Forum: Chat - Replies (10)

Since there is no place for suggestions, this is as good as any other.

My suggestion is fading out the category icons when all of the threads in said category are read, like it works with topics.

Category has unread topics:
[Image: a1U8GWb.png]

Category has no unread topics:
[Image: 8h7xQtM.png]


  Horse static movement
Posted by: James - 2019-04-13, 07:18 PM - Forum: Videos and Screenshots - Replies (9)

I'm testing this for my project (Spanish)



[Video: https://www.youtube.com/watch?v=Gph5G3jIRRI&]


  Gif forum avatars
Posted by: DowDaw - 2019-04-13, 05:51 PM - Forum: Chat - Replies (4)

Hey,



I can't put gif avatar for some reason, can we get it fixed/added please?


  Forsaken Tales: Forgotten Legends
Posted by: Seanny - 2019-04-13, 04:37 PM - Forum: Tech - Replies (11)

Hi all, I'm currently in the early stages of creating a singleplayer RPG simply known as "Forsaken Tales: Forgotten Legends".



It's too early in development right now to show any screenshots or anything like that.

Here is the full article on my website:?https://outlawgamesstudio.com/blog.php?id=2



I'm hoping to have the project in an early-access state by late 2020.

I'm also not expecting to add multi-player capability, but it may come after release.



Any opinions, constructive criticism or?questions are welcome. You can contact me here, discord or my website (https://outlawgamesstudio.com/contact.php).



Note: This project has very little, if anything, to do with SA-MP, or the GTA world.



Regards,

Seanny.


  My Statement
Posted by: Y_Less - 2019-04-13, 04:01 PM - Forum: General Discussions - Replies (120)

Time for my side I believe. You are all partially right, but not in the ways you may think. I am not trying to split the community, I am not trying to start a rival to SA:MP, and one important side point: I am not stealing anyone's code. You all think the cat is out of the bag because of one poorly worded post missing all context of the conversation it was a part of. You got a peek in to the bag and think the whole thing is stupid, which is understandable given the lack of information. I was trying to give the important points without revealing too many details, unfortunately that backfired because now you only have half a story from which to draw conclusions.



So let's put it all out there.


  • I am not trying to split the community. However, someone IS trying to destroy it - they have hoarded information, withheld long sought updates, threatened to delete the whole forums (last week), and bans anyone who says that maybe that's not great. This person has already split the community - releasing two separate parallel versions of the mod, then wondering why uptake on one was not as all-encommpasing as originally envisioned. For over a year people have asked for 0.3.7 and 0.3dl to be merged, while he just sat there and wondered if there was actually anyone that wanted it. He has said that he believes the community is dying, SA:MP is dying, and only has a year or two left; and is content to just watch it happen. Some of us disagree and have tried to convince him to do something - either carry on or pass on the reigns. The community shrinking is probably inevitable, but it will only die if not supported - and that's what happening right now.



    There is an unofficial discord, where yes people sometimes have fun and joke around with each other. But it wasn't founded as a place for rebellion. It came in to being because people liked SA:MP, and people use Discord, thus the community naturally wanted to combine both. There's an unofficial forums, Kalcor himself has previously said if you don't like these ones, make your own, but now bans those that do. However neither the forums nor the discord are run by me. They are simply a result of the official areas failing to move forward. That's not splitting, that's progressing.



  • I am not trying to start a rival to SA:MP. Two of the words there are wrong "start", and "rival". I'm not "starting" anything, I was trying to gauge further interest in a project well under way. These are the commits from just the last year:



    [Image: JGgR39R.png]



    There's nothing new about this, so what is this? And why is it not a rival?



  • I did once leave SA:MP, yes, but that was 6 years ago - get over it!




I am not betraying SA:MP, and I am not betraying Kalcor - he is the one betraying SA:MP, but most people are unable to separate the two. Yes, he founded it, but that doesn't make it his. Hundreds of other people have spent countless hours/days/weeks/YEARS working on this, making it what it is today, but just because Kalcor has sole access to one little part - the server code, he believes he is the most important part and can dictate where it goes and when it stops. In the beginning yes, he did most of the work, but ask yourself who you honestly believe has done more for this mod in the last few years - Kalcor or any one of these people:



[Image: IZYZXhB.png]



We don't want to usurp him, we don't want to belittle him or his contributions. He founded this mod, he got people involved, but all those other people helped him bring it to where it is today, and it is those people - the community, who are being repressed and ignored. I've tried to act as a mediator, brining Kalcor's views to people, and the community's views to him, and have received endless flak from both sides for it. I've also tried repeatedly to have Kalcor pass running/updating the mod on to someone else (not necessarily me, but there's no-one else stepping up). What were the responses?


  • He doesn't believe I'm capable of adding major new features. Of course he isn't adding any either, and actually doesn't believe there are any to be added, so why would that matter?

  • He wanted a plan. My main priorities were to fix bugs, improve the obvious gaps in the API, and create a better platform for other languages - i.e. a proper C/plugin API. Not even difficult tasks and ones I've more than shown I'm capable of. But apparently that doesn't qualify as a plan.

  • In his words exactly "they don't deserve it". That's what he thinks of this community that apparently I am the one trying to split up, and the idea of someone trying to carry it on.




No-one minds if he wants to quit, that's blatantly obvious and perfectly natural. We object to him taking everything else down with him. This is a community - it is a great community with a lot of very good long-time friends, centered around a close-source mod with a paranoid controlling leader. We want to move this center, that's all. We don't want to destroy SA:MP, we don't want to split the community (this got found out because I was trying to involve the long ignored Russian community, thus bring back in people already split off), we want to ensure its continuation - because Kalcor doesn't.



So I give you:



open.mp



That's the project (and domain, the burger-shot forums were just a temporary until we got the real one up, which hasn't happened yet). A team of TWENTY-TWO of the top people from San Andreas Multiplayer - server owners, scripters, testers, and other community leaders working together to recreate the whole thing from the ground up. Making a new forum is easy; the thing that always cemented Kalcor's control was his sole access to the mod source. There is a leaked version, but from the start I made it absolutely clear that we would take the high road in this regard and flat out refuse to use that in any way what so ever. So we have been reimplementing the whole thing from scratch. We originally wanted to release a full 1.0 version out of the blue, with that announcement being the first anyone heard of it, but that's not going to happen now. But it isn't too far off.



There have been forks, but they had two major problems: 1) They used the stolen code, something we don't, and 2) They were trying to reinvent the wheel, new scripting languages, totally different features, etc. We are making this fully backwards-compatible. You could switch your server over to ours, running the same script, and your players wouldn't even notice. There are of course plans for new features and improvements over time, but for now the focus is on backwards-compatibility, stability, and bug fixes (fixes we as a community have already done before because Kalcor wouldn't).



I tried very hard for over a year to work WITH Kalcor on improving SA:MP, I just happened to have a backup plan. So you can stick with him if you believe his approach is about to change and suddenly updates will happen (and if this debacle forces that, then we actually succeeded in the original goal). Or you can stick with the majority of the community, who know there is a problem and want to fix it - those that have been there for you through all this, helping, teaching, hosting, and leading.



It's up to you to decide who you think has betrayed SA:MP... You know where to find us.


  Task-based (async) dialog handling with PawnPlus
Posted by: Graber - 2019-04-13, 03:43 PM - Forum: Libraries - Replies (6)

samp-async-dialogs



[Image: sampctl-samp--async--dialogs-2f2f2f.svg?...-the-badge]



Async dialog handling with PawnPlus tasks.



Installation



Simply install to your project:



Code:
sampctl package install AGraber/samp-async-dialogs



Include in your code and begin using the library:



Code:
#include <async-dialogs>



It is recommended that you set a PawnPlus version explicitely on your pawn.json (preferibly the latest) to avoid always downloading the latest one.



If you don?t use sampctl, just download the async-dialogs.inc include and drop it to your includes/ folder, and then download the PawnPlus plugin and include from here.



While you?re on it and if you don?t use PawnPlus yet, you should check it out!



Usage



This include provides one single function



Code:
AwaitAsyncDialog(playerid, dialog_response[e_DIALOG_RESPONSE_INFO], style, const caption[], const info[], const button1[], const button2[])



This will show the dialog and await for the response, which will pause the current script?s execution and return the yielded value to the last public function (or 0 if it wasn?t set). When it?s responded to, the response details will be inside the dialog_response[e_DIALOG_RESPONSE_INFO] array. If another dialog gets shown while awaiting, the Task will be discarded with any following code that was to be resumed.



Example command:



Code:
CMD:asyncdialog(playerid, params[])

{

??? task_yield(1);



??? new dialog_response[e_DIALOG_RESPONSE_INFO];

??? AwaitAsyncDialog(playerid, dialog_response, DIALOG_STYLE_LIST, "Example dialog", "This is listitem 0\nAnd this is one\nShow example nested dialog", "ok", "no");



??? if(dialog_response[E_DIALOG_RESPONSE_Response])

??? {

??????? if(dialog_response[E_DIALOG_RESPONSE_Listitem] == 2)

??????? {

??????????? new other_dialog_response[e_DIALOG_RESPONSE_INFO];

??????????? AwaitAsyncDialog(playerid, other_dialog_response, DIALOG_STYLE_MSGBOX, "Example nested dialog", "You will recieve a message\nwhichever your response is", "OK", "Yes");



??????????? SendClientMessage(playerid, COLOR_WHITE, "You responded something to the example dialog");

??????? }

??????? else

??????? {

??????????? SendClientMessageEx(playerid, COLOR_WHITE, "Recieved: listitem = %d | inputtext = %s", dialog_response[E_DIALOG_RESPONSE_Listitem], dialog_response[E_DIALOG_RESPONSE_InputText]);

??????? }

??? }

??? else

??? {

??????? SendClientMessage(playerid, COLOR_WHITE, "Bye!");

??? }

}





Thanks


  • IllidanS4 for PawnPlus, which allowing this and even more awesome stuff

  • TommyB for helping me test it out on a real environment