SA-MP Forums Archive
[Ayuda] їMe ayudan con este sistema? - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Español/Spanish (https://sampforum.blast.hk/forumdisplay.php?fid=29)
+---- Thread: [Ayuda] їMe ayudan con este sistema? (/showthread.php?tid=569827)



[Ayuda] їMe ayudan con este sistema? - Ghost112397 - 03.04.2015

Buenas, hoy estaba viendo por el foro y me encontrй con este tutorial, me intereso bastante, ya que yo estoy haciendo un servidor TDM, bueno, voy al grano, lo he editado y le he quitado varias cosas, asн como le he cambiado algunas variables y tal, pero el problema es que no logro hacer que funcione bien.
Cuando estoy capturando y me salgo del CheckPoint el Timer no desaparece.
їAlguna ayuda por favor? Desde ya muchas gracias.
PHP код:
new PlayerCount[MAX_PLAYERS];
new 
PlayerCountTimer[MAX_PLAYERS];
new 
Zona1;
new 
AreaZona1;
new 
ColorZona1;
new 
ACP1;
enum CaptureInfo
{
    
gAttacked = 0,
    
gOwner = 0,
}
new 
CaptureZoneInfo[][CaptureInfo];
enum PlayerData
{
    
pCaptureZone,
    
drank
}
new 
PlayerInfo[MAX_PLAYERS][PlayerData];
public 
OnGameModeInit()
{
    
Zona1 = GangZoneCreate(93.423, 1331.278, 303.6248, 1459.734);
    
AreaZona1 = CreateDynamicRectangle(93.423, 1331.278, 303.6248, 1459.734, -1, -1, -1);
    
ACP1 = CreateDynamicCP(220.8459,1421.2120,10.5859,3.0, -1, -1, -1, 100.0);
    
ColorZona1 = COLOR_ROJO;
        return 
1;
}
public 
OnPlayerConnect(playerid)
{
    
GangZoneShowForPlayer(playerid, Zona1, ColorZona1);
        return 
1;
}
public 
OnPlayerDisconnect(playerid, reason)
{
        if(
PlayerInfo[playerid][pCaptureZone] == 1)
    {
        
SendClientMessageToAll(COLOR_ROJO, "[ZONA] Una de las zonas no ha sido capturada debido a que el atacante se ha desconectado!");
         
KillTimer(PlayerCountTimer[playerid]);
        
PlayerInfo[playerid][pCaptureZone] = 0;
    }
    return 
1;
}
public 
OnPlayerDeath(playerid, killerid, reason)
{
    if(
PlayerInfo[playerid][pCaptureZone] == 1)
    {
        
SendClientMessageToAll(COLOR_ROJO, "[ZONA] Una de las zonas no ha sido capturada debido a que el atacante ha muerto!");
         
KillTimer(PlayerCountTimer[playerid]);
        
PlayerInfo[playerid][pCaptureZone] = 0;
    }
    return 
1;
}
public 
OnPlayerEnterDynamicCP(playerid, checkpointid)
{
    if(
checkpointid == ACP1)
    {
         new 
string[128], pZone;
        if(
CaptureZoneInfo[checkpointid][gAttacked] == 1)
             return 
SendClientMessage(playerid, COLOR_ROJO, "Esta zona estб siendo capturada.");
        if(
CaptureZoneInfo[checkpointid][gOwner] == Equipo[playerid])
             return 
SendClientMessage(playerid, COLOR_ROJO, "Tu equipo es dueсo de esta zona.");
        if(
IsPlayerInAnyVehicle(playerid))
             return 
SendClientMessage(playerid, COLOR_ROJO, "No puedes capturar estado en un vehнculo!");
        
CaptureZoneInfo[checkpointid][gAttacked] = 1;
        
pZone = PlayerArea(playerid);
        
PlayerInfo[playerid][pCaptureZone] = 1;
        
PlayerCount[playerid] = 30;
        
PlayerCountTimer[playerid] = SetTimerEx("GangCount", 1000, true, "iii", playerid,  checkpointid, pZone);
        
format(string, sizeof(string), "{FFFFFF}[ZONAS] {FFFF00}%s {FFFFFF}estб siendo capturada!", ZoneName(checkpointid));
        
SendClientMessageToAll(-1, string);
    }
    return 
1;
}
public 
OnPlayerLeaveDynamicCP(playerid, checkpointid)
{
    if(
PlayerInfo[playerid][pCaptureZone] == 1)
    {
         if(
CaptureZoneInfo[checkpointid][gOwner] == Equipo[playerid])
           return 
0;
        new 
pZone;
          
CaptureZoneInfo[checkpointid][gAttacked] = 0;
        
pZone = PlayerArea(playerid);
          
GangZoneStopFlashForAll(pZone);
        
SendClientMessage(playerid, COLOR_ROJO, "Dejaste de capturar la zona!");
        
KillTimer(PlayerCountTimer[playerid]);
        
PlayerInfo[playerid][pCaptureZone] = 0;
    }
    return 
1;
}
forward GangCount(playerid, checkpointid, zonename);
public 
GangCount(playerid, checkpointid, zonename)
{
    new 
time[16];
    
PlayerCount[playerid] --;
    
format(time, sizeof(time), "~g~%i..", PlayerCount[playerid]);
    
GameTextForPlayer(playerid, time, 1100, 3);
    if(
PlayerCount[playerid] == 0)
    {
        
CaptureZoneInfo[checkpointid][gAttacked] = 0;
        
GangZoneStopFlashForAll(zonename);
        
GangZoneShowForAll(zonename, PlayerGangColor(playerid));
        
SetZoneColor(zonename, playerid);
        new 
string[128];
        
format(string, sizeof(string), "Recibiste {FFFF00}+3 score + $2500{FFFFFF} por capturar la zona {15FF00}%s!", ZoneName(checkpointid));
        
SendClientMessage(playerid, -1, string);
        
GivePlayerMoneyEx(playerid, 2500);
        
SetPlayerScore(playerid, GetPlayerScore(playerid)+3);
        
PlayerInfo[playerid][pCaptureZone] = 0;
        foreach(
Player, i)
        {
            if(
CaptureZoneInfo[checkpointid][gOwner] == Equipo[i])
            {
                
format(string, sizeof(string), "Tu equipo ha perdido la zona {FF0000}%s{FFFFFF}, perdiste {FF0000}-1{FFFFFF} score!", ZoneName(checkpointid));
                
SetPlayerScore(i, GetPlayerScore(i)-1);
                  
SendClientMessage(i, -1, string);
            }
            else if(
Equipo[i] == Equipo[playerid])
            {
                if(
i != playerid)
                {
                    
format(string, sizeof(string), "Te equipo ha capturado la zona {15FF00}%s{FFFFFF}, ganaste {15FF00}+1{FFFFFF} score!", ZoneName(checkpointid));
                    
SetPlayerScore(i, GetPlayerScore(i)+1);
                    
SendClientMessage(i, -1, string);
                }
            }
        }
          
KillTimer(PlayerCountTimer[playerid]);
        
CaptureZoneInfo[checkpointid][gOwner] = Equipo[playerid];
    }
    return 
1;
}
stock PlayerArea(playerid)
{
    new 
pZone;
    if(
IsPlayerInDynamicArea(playerid, AreaZona1))
    {
         
GangZoneFlashForAll(Zona1, PlayerGangColor(playerid));
         
pZone = Zona1;
    }
    return 
pZone;
}
stock PlayerGangColor(playerid)
{
    new 
str;
    if(
Equipo[playerid] == 0) str = COLOR_AZUL;
    else if(
Equipo[playerid] == 1) str = COLOR_ROJO;
    return 
str;
}
stock ZoneName(checkpointid)
{
    new 
str[32];
    if  (
checkpointid == ACP1) str = ("Zona industrial");
    return 
str;
}
stock SetZoneColor(zonename, playerid)
{
    if(
zonename == Zona1)
    {
        
ColorZona1 = PlayerGangColor(playerid);
    }
} 
Explicaciуn detallada: Al momento de ingresar al Checkpoint para capturar la zona, funciona a la perfecciуn, el problema viene cuando salgo del Checkpoint mientras capturo, es decir: Estoy capturando, me salgo del Checkpoint cuando faltan 15 segundos(o los segundos que se te ocurran) y el tiempo de captura sigue corriendo, mientras que al salirme del Checkpoint deberнa cancelarse la captura y matar al timer.


Re: [Ayuda] їMe ayudan con este sistema? - SickAttack - 03.04.2015

Publica todo el codigo y describa el problema detalladamente.


Respuesta: Re: [Ayuda] їMe ayudan con este sistema? - Ghost112397 - 03.04.2015

Quote:
Originally Posted by SickAttack
Посмотреть сообщение
Publica todo el codigo y describa el problema detalladamente.
Listo.


Respuesta: [Ayuda] їMe ayudan con este sistema? - OTACON - 03.04.2015

Код:
// OnPlayerLeaveDynamicCP ...
         if(CaptureZoneInfo[checkpointid][gOwner] != Equipo[playerid])
           return 0;



Respuesta: [Ayuda] їMe ayudan con este sistema? - Ghost112397 - 03.04.2015

Quote:
Originally Posted by OTACON
Посмотреть сообщение
Код:
// OnPlayerLeaveDynamicCP ...
         if(CaptureZoneInfo[checkpointid][gOwner] != Equipo[playerid])
           return 0;
Funciono de 10 :3 Muchas gracias.
Ahora el ъnico problema que surgiу es que si el equipo 0 captura la Zona y luego el Equipo 1 trata de recuperarla, dice que la zona estб siendo capturada.