Quote:
Originally Posted by deryan
No estoy buscando que me hagan todo, no entiendo el fs weapon holder, por eso es que quiero que me expliquen como crear mi propio sistema y esa duda que tengo sobre los nombres
|
aca te explico el funcionamiento de un include y de un FS que encontre, espero te sirva.
INC: gun holder
pawn Код:
#include <a_samp>
/*
=== gh.inc ===
Gun Holder:
native SetHolderWeapon(gh_playerid, gh_weapon);
native GetHolderWeapon(gh_playerid);
native RemoveHolderWeapon(gh_playerid);
*/
enum gh_player_enum
{
gh_wep,
gh_obj
}
new gh_player[MAX_PLAYERS][gh_player_enum]; // definiendo el enum
new gh_objectIds[200] = {
-1, 331, 333, 334, 335, 336, 337, 338, 339, 341, 321, // 0 - 10
322, 323, 324, 325, 326, 342, 343, 344, -1, -1 , -1 , // 11 - 21
346, 347, 348, 349, 350, 351, 352, 353, 355, 356, 372, // 22 - 32
357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, // 33 - 43
368, 369, -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , // 54 - 64
}; // objetos de armas para atacharlas al jugador
// esto de arriba, son las variables definidas que se van a usar.
stock SetHolderWeapon(gh_playerid, gh_weapon)
{
if (gh_GetObjectID(gh_weapon) == -1) // variable que sн estб -1, retorna 0 (no se hara nada)
{
return 0;
}
if (gh_player[gh_playerid][gh_obj] != -1) // variable que si esta diferente o igual de -1, se elimina el objeto y se asigna la variable gb_obj a 255 (nulo)
{
DestroyObject(gh_player[gh_playerid][gh_obj]);
gh_player[gh_playerid][gh_obj] = 255;
}
gh_player[gh_playerid][gh_wep] = gh_weapon; // variable gh_wep igual a gh_weapon (mira la definiciуn del stock, es decir, la variable que se almacena al usar el stock va a ser igual a gh_wep
gh_player[gh_playerid][gh_obj] = CreateObject(gh_GetObjectID(gh_weapon), 0.0, 0.0, 0.0, 0.0, 0.0, 0.0); // se crea el objeto del arma
AttachObjectToPlayer(gh_player[gh_playerid][gh_obj], gh_playerid, 0, -0.13, 0.15, -5.0, 315.0, 0.0); // funcion que hace pegar las armas al cuerpo del jugador
return 1; // retorna 1
}
stock GetHolderWeapon(gh_playerid)
{
return gh_player[gh_playerid][gh_wep]; // GetHolderWeapon(gh_playerid) retorna la variable gh_wep (en este caso, retorna la variable almacenada en SetHolderWeapon(gh_playerid, gh_weapon)
}
// es decir, que si tenemos esto: SetHolderWeapon(gh_playerid, gh_weapon), y la defino asн SetHolderWeapon(playerid, variable que almacena)
// SetHolderWeapon(playerid, variablealmacenada). variablealmacenada viene siendo la variable gh_player[gh_playerid][gh_wep] ya que es igual a gh_weapon (mira el stock)
stock RemoveHolderWeapon(gh_playerid)
{
gh_player[gh_playerid][gh_wep] = -1; // la variable gh_wep es igual a -1
DestroyObject(gh_player[gh_playerid][gh_obj]); // se elimina el objeto
gh_player[gh_playerid][gh_obj] = -1; // variable -1, al usar SetHolderWeapon si la variable es -1 se elimina el objeto y la variable gh_obj es nula
return 1;
}
stock gh_GetObjectID(wepID)
{
if (wepID < 0 || wepID > 64) return -1; // si la variable es mayor que 0 y menor que 64 retorna -1
return gh_objectIds[wepID]; // al usar este stock, va a retornar la variable gh_objectIds(wepID)
}
FS ArmedBody
pawn Код:
#include <a_samp>#define ARMEDBODY_USE_HEAVY_WEAPON (false)static armedbody_pTick
[MAX_PLAYERS
];
public OnFilterScriptInit
(){ printf("=====================================================================");
printf("This is a part of a OpenGTA subject, visit opengta.org for more info.");
printf("FilterScript Name: Armed body");
printf("Description:Attatch weapond to player's body");
printf("Author:yezizhu");
printf("Special thanks:Double-O-Seven, Brian.");
printf("Contact author: imyzz@opengta.org");
printf("=====================================================================");
return true;
}public OnFilterScriptExit
(){ return true;
}public OnPlayerUpdate
(playerid
){ // callback que se actualiza cada vez que el cliente envia su estado al servidor if(GetTickCount
() - armedbody_pTick
[playerid
] > 113){ // se crea un timer con GetTickCount y si la variable armedbody es mayor que 113 se ejecuta toda la funciуn new weaponid
[13],weaponammo
[13],pArmedWeapon;
// se declara las variables que almacenan las id de armas y su municion pArmedWeapon
= GetPlayerWeapon
(playerid
);
GetPlayerWeaponData
(playerid,
1,weaponid
[1],weaponammo
[1]);
// obtiene el dato de las armas slot 1 (o id) GetPlayerWeaponData
(playerid,
2,weaponid
[2],weaponammo
[2]);
// obtiene el dato de las armas slot 2 (o id) GetPlayerWeaponData
(playerid,
4,weaponid
[4],weaponammo
[4]);
// obtiene el dato de las armas slot 4 (o id) GetPlayerWeaponData
(playerid,
5,weaponid
[5],weaponammo
[5]);
// obtiene el dato de las armas slot 5 (o id) #if ARMEDBODY_USE_HEAVY_WEAPON // chequea si el #define ARMEDBODY_USE_HEAVY_WEAPON es false, sн lo es, se ejecuta esto: GetPlayerWeaponData
(playerid,
7,weaponid
[7],weaponammo
[7]);
// obtiene el dato de la arma slot 7 #endif // end if (termina la restricciуn) if(weaponid
[1] && weaponammo
[1] > 0){ // si la variable weaponid[1] "[1] es la dimension donde esta una variable almacenada" y weaponammo[1] es mayor que cero, es decir, si el slot 1 hay armas y municion, se ejecuta dicha funciуn if(pArmedWeapon
!= weaponid
[1]){ // si pArmedWeapon es diferente o igual a weaponid[1] se ejecuta la funcion if(!IsPlayerAttachedObjectSlotUsed
(playerid,
0)){ // si el jugador NO esta usando el slot 0 de atachamientos de objetos al jugador, si es NO se ejecuta dicha funcion SetPlayerAttachedObject
(playerid,
0,GetWeaponModel
(weaponid
[1]),
1,
0.199999,
-0.139999,
0.030000,
0.500007,
-115.000000,
0.000000,
1.000000,
1.000000,
1.000000);
// se atacha el arma al jugador } } else { if(IsPlayerAttachedObjectSlotUsed
(playerid,
0)){ // si el jugador ESTA usando el slot 0 de Attached, se elimina el objeto RemovePlayerAttachedObject
(playerid,
0);
// se elimina el objeto si esto es CIERTO (el if) } } } else if(IsPlayerAttachedObjectSlotUsed
(playerid,
0)){ // si el jugador ESTA usando el slot 0 de Attached, se elimina el objeto RemovePlayerAttachedObject
(playerid,
0);
} // y lo mismo que explique arriba, es lo mismo que con las de abajo pero con diferente slot de objetos unidos o pegados al jugador. // y tambien las armas que tiene el jugador que se almacenan en weaponid [13] (13 significa que son 13 armas que tiene el jugador en total) y en cada dimension (1,2,3,4,5) se almacena el id o el modelo del arma // weaponammo es lo mismo, pero ella almacena las municiones de cada arma // weaponid[2] esta una desert deagle y contiene 1000 balas, las 1000 balas estan en weaponammo[2] if(weaponid
[2] && weaponammo
[2] > 0){ if(pArmedWeapon
!= weaponid
[2]){ if(!IsPlayerAttachedObjectSlotUsed
(playerid,
1)){ SetPlayerAttachedObject
(playerid,
1,GetWeaponModel
(weaponid
[2]),
8,
-0.079999,
-0.039999,
0.109999,
-90.100006,
0.000000,
0.000000,
1.000000,
1.000000,
1.000000);
} } else { if(IsPlayerAttachedObjectSlotUsed
(playerid,
1)){ RemovePlayerAttachedObject
(playerid,
1);
} } } else if(IsPlayerAttachedObjectSlotUsed
(playerid,
1)){ RemovePlayerAttachedObject
(playerid,
1);
} if(weaponid
[4] && weaponammo
[4] > 0){ if(pArmedWeapon
!= weaponid
[4]){ if(!IsPlayerAttachedObjectSlotUsed
(playerid,
2)){ SetPlayerAttachedObject
(playerid,
2,GetWeaponModel
(weaponid
[4]),
7,
0.000000,
-0.100000,
-0.080000,
-95.000000,
-10.000000,
0.000000,
1.000000,
1.000000,
1.000000);
} } else { if(IsPlayerAttachedObjectSlotUsed
(playerid,
2)){ RemovePlayerAttachedObject
(playerid,
2);
} } } else if(IsPlayerAttachedObjectSlotUsed
(playerid,
2)){ RemovePlayerAttachedObject
(playerid,
2);
} if(weaponid
[5] && weaponammo
[5] > 0){ if(pArmedWeapon
!= weaponid
[5]){ if(!IsPlayerAttachedObjectSlotUsed
(playerid,
3)){ SetPlayerAttachedObject
(playerid,
3,GetWeaponModel
(weaponid
[5]),
1,
0.200000,
-0.119999,
-0.059999,
0.000000,
206.000000,
0.000000,
1.000000,
1.000000,
1.000000);
} } else { if(IsPlayerAttachedObjectSlotUsed
(playerid,
3)){ RemovePlayerAttachedObject
(playerid,
3);
} } } else if(IsPlayerAttachedObjectSlotUsed
(playerid,
3)){ RemovePlayerAttachedObject
(playerid,
3);
} #if ARMEDBODY_USE_HEAVY_WEAPON if(weaponid
[7] && weaponammo
[7] > 0){ if(pArmedWeapon
!= weaponid
[7]){ if(!IsPlayerAttachedObjectSlotUsed
(playerid,
4)){ SetPlayerAttachedObject
(playerid,
4,GetWeaponModel
(weaponid
[7]),
1,
-0.100000,
0.000000,
-0.100000,
84.399932,
112.000000,
10.000000,
1.099999,
1.000000,
1.000000);
} } else { if(IsPlayerAttachedObjectSlotUsed
(playerid,
4)){ RemovePlayerAttachedObject
(playerid,
4);
} } } else if(IsPlayerAttachedObjectSlotUsed
(playerid,
4)){ RemovePlayerAttachedObject
(playerid,
4);
} #endif armedbody_pTick
[playerid
] = GetTickCount
();
} return true;
} //by Double-O-Sevenstock GetWeaponModel
(weaponid
) // obtiene el modelo de arma{ switch(weaponid
) { case 1: return 331;
case 2..
8: return weaponid
+331;
case 9: return 341;
case 10..
15: return weaponid
+311;
case 16..
18: return weaponid
+326;
case 22..
29: return weaponid
+324;
case 30,
31: return weaponid
+325;
case 32: return 372;
case 33..
45: return weaponid
+324;
case 46: return 371;
} return 0;
}