Bueno resulta que este script funciona un poco mal y ademбs no guarda el arbol al reiniciar el servidor tambiйn al borrarlo el arbol queda el label.
Код:
#define function%0(%1) forward %0(%1); public %0(%1)
#define PlayerToPoint(%1,%2,%3,%4,%5) IsPlayerInRangeOfPoint(%2,%1,%3,%4,%5)
#define MAX_ARBOLES 3
enum aInfo
{
cantU,
Text3D:aLabA,
aMapA[10],
Float:aPosX,
Float:aPosY,
Float:aPosZ
}
new InfoArbol[MAX_ARBOLES][aInfo];
new aUserR[MAX_ARBOLES][MAX_PLAYERS][24];
public OnGameModeExit()
GuardarArboles();
public OnGameModeInit()
ResetearVariablesArbol();
CargarArboles();
CMD:arbol(playerid, params[])
{
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xCCCCCCFF, "Debes logearte con la Rcon");
if(sscanf(params, "s[7]", params[0]))
{
SendClientMessage(playerid, -1, "{00C3EA}» {FFFFFF}Uso correcto: /arbol [Opciуn]");
SendClientMessage(playerid, -1, "{00FF00}Opciones: crear - sacar");
return 1;
}
if(!strcmp(params[0], "crear", true))
{
new Float:x, Float:y, Float:z;
for(new i=0; i<MAX_ARBOLES; i++)
{
if(InfoArbol[i][aPosX] == 0)
{
GetPlayerPos(playerid, x, y, z);
InfoArbol[i][aPosX] = x;
InfoArbol[i][aPosY] = y;
InfoArbol[i][aPosZ] = z;
InfoArbol[i][aMapA][0] = CreateObject(19076, x, y, z-1.0,0.0,0.0,300);
InfoArbol[i][aMapA][1] = CreateObject(19054, x, y+1.0, z-0.4,0,0,0.0,300);
InfoArbol[i][aMapA][2] = CreateObject(19058, x+1.0, y, z-0.4,0,0,0.0,300);
InfoArbol[i][aMapA][3] = CreateObject(19056, x, y-1.0, z-0.4,0,0,0.0,300);
InfoArbol[i][aMapA][4] = CreateObject(19057, x-1.0, y, z-0.4,0,0,0.0,300);
InfoArbol[i][aMapA][5] = CreateObject(19058, x-1.5, y+1.5, z-1.0,0,0,0.0,300);
InfoArbol[i][aMapA][6] = CreateObject(19055, x+1.5, y-1.5, z-1.0,0,0,0.0,300);
InfoArbol[i][aMapA][7] = CreateObject(19057, x+1.5, y+1.5, z-1.0,0,0,0.0,300);
InfoArbol[i][aMapA][8] = CreateObject(19054, x-1.5, y-1.5, z-0.2,0,0,0.0,300);
InfoArbol[i][aMapA][9] = CreateObject(3526, x, y, z-1.0,0,0,0,300);
InfoArbol[i][aLabA] = Create3DTextLabel("Usa {0000FF}/regalo{FFFFFF} para obtener uno", -1, x, y+1, z, 12.0, 0, 0);
SendClientMessage(playerid, 0x00FF00FF, "Has colocado un arbol navideсo con exito");
GuardarArboles();
return 1;
}
if(i == 2)
{
SendClientMessage(playerid, -1, "{CCCCCC}Ya se han colocado el maximo de arboles posibles");
return 1;
}
}
return 1;
}
if(!strcmp(params[0], "sacar", true))
{
for(new i=0; i<MAX_ARBOLES; i++)
{
if(PlayerToPoint(4.0, playerid, InfoArbol[i][aPosX], InfoArbol[i][aPosY], InfoArbol[i][aPosZ]))
{
for(new j=0; j <= 13; j++)
{
DestroyObject(InfoArbol[i][aMapA][j]);
}
Delete3DTextLabel(InfoArbol[i][aLabA]);
InfoArbol[i][aPosX] = 0;
InfoArbol[i][aPosY] = 0;
InfoArbol[i][aPosZ] = 0;
for(new j=0; j<InfoArbol[i][cantU]; j++)
{
aUserR[i][j] = "nada";
}
GuardarArboles();
SendClientMessage(playerid, -1, "{00FF00}Has retirado un arbol navideсo con exito");
break;
}
}
return 1;
}
return 1;
}
CMD:regalo(playerid, params[])
{
new name[24];
GetPlayerName(playerid, name, 24);
for(new i=0; i<MAX_ARBOLES; i++)
{
if(PlayerToPoint(4.0, playerid, InfoArbol[i][aPosX], InfoArbol[i][aPosY], InfoArbol[i][aPosZ]))
{
for(new j=0; j<MAX_PLAYERS; j++)
{
if(strcmp(name, aUserR[i][j], true) == 0)
{
SendClientMessage(playerid, 0xCCCCCCFF, "Ya usaste /regalo en este arbol");
return 1;
}
}
switch(random(100))
{
case 0..9:
{
SendClientMessage(playerid, -1, "Te damos un arma");
GivePlayerWeapon(playerid, 27, 99999);
}
case 10..29:
{
SendClientMessage(playerid, -1, "Tu regalo es un bate de beisbol");
GivePlayerWeapon(playerid, 5, 1);
}
case 30..59:
{
SendClientMessage(playerid, -1, "Regalo con un 30 % de posibilidades de salir");
}
case 60..99:
{
SendClientMessage(playerid, -1, "Regalo con un 40 % de posibilidades de salir");
}
case 100:
{
SendClientMessage(playerid, -1, "Regalo con un 1 % de posibilidades de salir");
}
}
for(new j=0; j<MAX_PLAYERS; j++)
{
if(!strcmp(aUserR[i][j], "nadie", true) || !strcmp(aUserR[i][j], "nada", true))
{
InfoArbol[i][cantU]++;
aUserR[i][j] = name;
return 1;
}
}
}
}
return 1;
}
function CargarArboles()
{
new file[128] = "Arboles.ini";
new names[50];
if(fexist(file))
{
InfoArbol[0][aPosX] = dini_Float(file, "aPosX[0]");
InfoArbol[1][aPosX] = dini_Float(file, "aPosX[1]");
InfoArbol[2][aPosX] = dini_Float(file, "aPosX[2]");
InfoArbol[0][aPosY] = dini_Float(file, "aPosY[0]");
InfoArbol[1][aPosY] = dini_Float(file, "aPosY[1]");
InfoArbol[2][aPosY] = dini_Float(file, "aPosY[2]");
InfoArbol[0][aPosZ] = dini_Float(file, "aPosZ[0]");
InfoArbol[1][aPosZ] = dini_Float(file, "aPosZ[1]");
InfoArbol[2][aPosZ] = dini_Float(file, "aPosZ[2]");
InfoArbol[0][cantU] = dini_Int(file, "cantU[0]");
InfoArbol[1][cantU] = dini_Int(file, "cantU[1]");
InfoArbol[2][cantU] = dini_Int(file,"cantU[2]");
}
for(new i=0; i<MAX_ARBOLES; i++)
{
for(new j=0; j<MAX_PLAYERS; j++)
{
if(fexist(file))
{
format(names, 50, "nombreU[%d][%d]", i, j);
strcat(aUserR[i][j], dini_Get(file, names));
if(!strlen(aUserR[i][j])) aUserR[i][j] = "nadie";
}
}
}
for(new i=0; i<MAX_ARBOLES; i++)
{
if(InfoArbol[i][aPosX] != 0)
{
InfoArbol[i][aMapA][0] = CreateObject(19076, InfoArbol[i][aPosX], InfoArbol[i][aPosY], InfoArbol[i][aPosZ]-1.0,0.0,0.0,300);
InfoArbol[i][aMapA][1] = CreateObject(19054, InfoArbol[i][aPosX], InfoArbol[i][aPosY]+1.0, InfoArbol[i][aPosZ]-0.4,0,0,0.0,300);
InfoArbol[i][aMapA][2] = CreateObject(19058, InfoArbol[i][aPosX]+1.0,InfoArbol[i][aPosY], InfoArbol[i][aPosZ]-0.4,0,0,0.0,300);
InfoArbol[i][aMapA][3] = CreateObject(19056, InfoArbol[i][aPosX], InfoArbol[i][aPosY]-1.0, InfoArbol[i][aPosZ]-0.4,0,0,0.0,300);
InfoArbol[i][aMapA][4] = CreateObject(19057, InfoArbol[i][aPosX]-1.0, InfoArbol[i][aPosY], InfoArbol[i][aPosZ]-0.4,0,0,0.0,300);
InfoArbol[i][aMapA][5] = CreateObject(19058, InfoArbol[i][aPosX]-1.5, InfoArbol[i][aPosY]+1.5, InfoArbol[i][aPosZ]-1.0,0,0,0.0,300);
InfoArbol[i][aMapA][6] = CreateObject(19055, InfoArbol[i][aPosX]+1.5, InfoArbol[i][aPosY]-1.5, InfoArbol[i][aPosZ]-1.0,0,0,0.0,300);
InfoArbol[i][aMapA][7] = CreateObject(19057, InfoArbol[i][aPosX]+1.5, InfoArbol[i][aPosY]+1.5, InfoArbol[i][aPosZ]-1.0,0,0,0.0,300);
InfoArbol[i][aMapA][8] = CreateObject(19054, InfoArbol[i][aPosX]-1.5, InfoArbol[i][aPosY]-1.5, InfoArbol[i][aPosZ],0,0,0.0,300);
InfoArbol[i][aMapA][9] = CreateObject(3526, InfoArbol[i][aPosX], InfoArbol[i][aPosY], InfoArbol[i][aPosZ]-1.0,0,0,0,300);
InfoArbol[i][aLabA] = Create3DTextLabel("Usa {0000FF}/regalo{FFFFFF} para obtener uno", -1, InfoArbol[i][aPosX], InfoArbol[i][aPosY], InfoArbol[i][aPosZ], 12.0, 0, 0);
}
}
return 1;
}
stock GuardarArboles()
{
new file[20] = "Arboles.ini";
new idA[128];
for(new i=0; i<MAX_ARBOLES; i++)
{
for(new j=0; j<MAX_PLAYERS; j++)
{
if(strcmp("nadie", aUserR[i][j], true))
{
format(idA, 128, "nombreU[%d][%d]", i, j);
dini_Set(file, idA, aUserR[i][j]);
}
}
format(idA, 10, "cantU[%d]", i);
dini_IntSet(file, idA, InfoArbol[i][cantU]);
format(idA, 10, "aPosX[%d]", i);
dini_FloatSet(file, idA, InfoArbol[i][aPosX]);
format(idA, 10, "aPosY[%d]", i);
dini_FloatSet(file, idA, InfoArbol[i][aPosY]);
format(idA, 10, "aPosZ[%d]", i);
dini_FloatSet(file, idA, InfoArbol[i][aPosZ]);
}
return 1;
}
stock ResetearVariablesArbol()
{
for(new i=0; i< MAX_ARBOLES; i++)
{
for(new j=0; j<MAX_PLAYERS; j++)
{
aUserR[i][j] = "nadie";
}
InfoArbol[i][aPosX] = 0;
InfoArbol[i][aPosY] = 0;
InfoArbol[i][aPosZ] = 0;
}
return 1;
}
Por quй no lo mapeas con MTA o un Map Editor y asн queda fijo? por quй hacerlo con script?. Es al pedo.
Si puede ser es buena, lo tomarй en cuenta encerio.
Una duda sobre el tema del /regalo porque cuando toman un regalo por ejemplo te toca una edc lo banea el anticheat?
Porque seguramente el regalo utiliza una funcion por defecto de samp y el anticheat lo detecta. El gm quizбs usa funciones propias en reemplazo a las por defecto, eso se hace para que funcione como anticheat.
Por ejemplo cuando te colocas dinero en un server y se te resta. Es porque el cheat de dinero usa una funciуn por defecto del samp que es GivePlayerMoney y seguramente el GM en lugar de usar esa variable usa una modificada. Como SafeGiveMoney, DarDinero, entre otras.