[Ajuda] Atualizar RepairVehicle
#1

Galera eu fiz um sistema de blindagem no meu gm, sу que tem um pequeno problema.
O RepairVehicle da blindagem, repara o veiculo muito devagar (se alguйm atirar de metralhadora sem parar, o veiculo explode).

O Funcionamento era pra ser assim, eu coloquei "Blindagem e Lataria" no velocimetro, quando o player blinda o veiculo a blindagem vai para 100%, assim quando ele leva dano, a porcentagem da blindagem й reduzida, atй chegar a zero a lataria do veiculo era pra ser reparada (й reparada muito lentamente, por isso explode antes da blindagem chegar a 0%) e quando a blindagem zerasse, comeзaria a dar dano na lataria, ai sim o veiculo comeзaria a sair fumaзa e explodir.


Queria saber se tem como colocar um timer que seta o tempo em que o veiculo й reparado.

pawn Код:
if(dialogid == BLINDAGEM)
    {
        Controle(playerid, 1);
        ShowPlayerDialog(playerid,BLINDAGEM+1,DIALOG_STYLE_LIST,"Sistema de Blindagem","Blindagem Comum\nBlindagem Sуcio","Aceitar","Cancelar");
        if(!response)
        return true;
        if(listitem == 0)
        {
            Blin[vehicleid] = 100;
            RepairVehicle(vehicleid);
            SendClientMessage(playerid, COR_RED, "Seu Veiculo Foi Blindado Por $30000");
            GivePlayerMoney(playerid, -30000);
            GetVehicleHealth(vehicleid, Vida);
            SetTimerEx("Blin", 1000, false, "i", vehicleid);
            GetPlayerName(playerid, sendername, sizeof(sendername));
            format(string, sizeof(string), "%s Blindou seu Veiculo", sendername);
            ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
            return true;
        }
        else if(listitem == 1)
        {
                Blin[vehicleid] = 200;
                RepairVehicle(vehicleid);
                SendClientMessage(playerid, COR_RED, "*[SУCIO]* Seu Veiculo Foi Blindado +200+ Por $15000");
                GivePlayerMoney(playerid, -15000);
                GetVehicleHealth(vehicleid, Vida);
                SetTimerEx("Blin", 1000, false, "i", vehicleid);
                GetPlayerName(playerid, sendername, sizeof(sendername));
                format(string, sizeof(string), "Sуcio %s Blindou seu Veiculo", sendername);
                ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
                return true;
          }
Reply
#2

Em qual callback vocк estб usando o sistema? Ou vocк estб usando um timer?
Reply
#3

OnPlayerCommandText
Reply
#4

PHP код:
if(dialogid == BLINDAGEM)
    {
        
Controle(playerid1);
        
ShowPlayerDialog(playerid,BLINDAGEM+1,DIALOG_STYLE_LIST,"Sistema de Blindagem","Blindagem Comum\nBlindagem Sуcio","Aceitar","Cancelar");
        if(!
response)
        return 
true
Por que vocк estб chamando um dialog aн? o.o
Reply
#5

porque o sistema inteiro й em dialog.
O player chega no local, buzina, aparece essa dialog.
Se ele selecionar a opзгo 1 - blindagem comum
Se ele selcionar a opзгo 2 - blindagem sуcio.
Por isso й em dialog.

Mas o problema num й esse, o problema й que a blindagem atualiza muito lentamente, ai o veiculo demora pra reparar e explode.

pawn Код:
if(strcmp(cmd, "/blindar", true) == 0)
    {
        if(IsPlayerInRangeOfPoint(playerid, 3.0, 2456.7915,-1461.0281,23.7199))
        {
            ShowPlayerDialog(playerid,BLINDAGEM,DIALOG_STYLE_LIST,"Sistema de Blindagem","Blindagem Comum\nBlindagem Sуcio","Aceitar","Cancelar");
            return true;
            }
        }
Reply
#6

Fiz uma base de sistema aqui, testei com batidas e deu tudo certinho.. Agora tem que testar com tiros para ver se tб okay..

PHP код:
new FloatVehLife[MAX_VEHICLES]; 
new 
Blindagem[MAX_VEHICLES];
#define BLINDAGEM 567
public OnPlayerCommandText(playeridcmdtext[])
{
    if(
strcmp(cmdtext"/blindar"true) == 0)
    {
        if(!
IsPlayerInRangeOfPoint(playerid3.02456.7915,-1461.0281,23.7199)) return 1;
        if(!
IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, -1"Oras, cadк o veнculo?");
        
ShowPlayerDialog(playerid,BLINDAGEM,DIALOG_STYLE_LIST,"Sistema de Blindagem","Blindagem Comum\nBlindagem Sуcio","Aceitar","Cancelar");
        return 
1;
    }
    return 
0;
}
public 
OnDialogResponse(playeriddialogidresponselistiteminputtext[])
{
    if(
dialogid == BLINDAGEM)
    {
        if(!
response) return 1;
        
Controle(playerid1);
        new 
vehid GetPlayerVehicleID(playerid);
        new 
sendername[MAX_PLAYER_NAME], string[128];
        if(
listitem == 0)
        {
            
Blindagem[vehid] = 100;
            
RepairVehicle(vehid);
            
SendClientMessage(playeridCOR_RED"Seu Veiculo Foi Blindado Por $30000");
            
GivePlayerMoney(playerid, -30000);
            
GetVehicleHealth(vehidVehLife[vehid]);
            
GetPlayerName(playeridsendernamesizeof(sendername));
            
format(stringsizeof(string), "%s Blindou seu Veiculo"sendername);
            
ProxDetector(30.0playeridstringCOLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
            return 
1;
        }
        else if(
listitem == 1)
        {
            
Blindagem[vehid] = 200;
            
RepairVehicle(vehid);
            
SendClientMessage(playeridCOR_RED"*[SУCIO]* Seu Veiculo Foi Blindado +200+ Por $15000");
            
GivePlayerMoney(playerid, -15000);
            
GetVehicleHealth(vehidVehLife[vehid]);
            
GetPlayerName(playeridsendernamesizeof(sendername));
            
format(stringsizeof(string), "Sуcio %s Blindou seu Veiculo"sendername);
            
ProxDetector(30.0playeridstringCOLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
            return 
1;
         }
        return 
1;
    }
    return 
1;
}
public 
OnVehicleDamageStatusUpdate(vehicleidplayerid)
{
    new 
FloatvLife;
    
GetVehicleHealth(vehicleidvLife);
    if(
vLife VehLife[vehicleid])
    {
        if(
Blindagem[vehicleid] > 0)
        {
            new 
dano floatround(VehLife[vehicleid] - vLife);
            new 
calc dano*100/1000;
            
Blindagem[vehicleid] -= calc;
            
SetVehicleHealth(vehicleid1000);
            
RepairVehicle(vehicleid);
            
GetVehicleHealth(vehicleidVehLife[vehicleid]);
            return 
1;
        }
    }
    return 
1;

Provavelmente sendername e string vocк jб tem declaradas, entгo vocк apaga essas que coloquei.. Tive que colocar para compilar aqui xD

A blindagem diminui de acordo com a intensidade da batida.. Se a batida for fraca, nгo vai diminuir muito ou nem vai diminuir..
Reply
#7

Nгo resolveu, deu outro bug.
O veiculo perde blindagem e invйs dela parar no zero, ela vai caindo negativamente (VAI CAINDO BLINDAGEM E A LATARIA JUNTO).
E o carro nгo suporta danos multiplos (metralhadora), quando ele recebe danos multiplos ao invйs de cair a blindagem, ele comeзa a cair a lataria, tem que parar de atirar pra blindagem reparar o veнculo.
Ou seja a blindagem ta lenta pra reparar a lataria.

Lataria
pawn Код:
new Float:Speedo_X,Float:Speedo_Y,Float:Speedo_Z;
    new Float:Speedo_HP;
    for(new i=0; i<MAX_PLAYERS; i++)
    {
        new vehicle = GetPlayerVehicleID(i);
        if(IsPlayerConnected(i) && IsPlayerInAnyVehicle(i))
        {
            GetPlayerPos(i, Speedo_X, Speedo_Y, Speedo_Z);
            GetPlayerVehicleID(i);
            GetVehicleHealth(GetPlayerVehicleID(i), Speedo_HP);
            new str1[256],str2[256],str3[256],str4[256],str5[256],str6[256],str7[256];
            if(SpeedoON[i] == 0)
            {
                TextDrawShowForPlayer(i, box[i]);
                TextDrawShowForPlayer(i, fahrzeug[i]);
                TextDrawShowForPlayer(i, mph[i]);
                TextDrawShowForPlayer(i, combustivelt[i]);
                TextDrawShowForPlayer(i, zustand[i]);
                TextDrawShowForPlayer(i, gps[i]);
                TextDrawShowForPlayer(i, hoehe[i]);
                TextDrawShowForPlayer(i, url[i]);
                SpeedoON[i] = 1;
            }
            format(str1,sizeof(str1),"~w~~d~Veiculo: ~b~~h~~h~%s",vehName[GetVehicleModel(vehicle)-400]);
            TextDrawSetString(fahrzeug[i], str1);
            format(str2,sizeof(str2),"~w~~d~KM/H: ~y~%d",GetPlayerSpeed(i, true));
            TextDrawSetString(mph[i], str2);
            format(str3,sizeof(str3),"~w~~d~Combustivel: ~g~~h~%d%%", Gas[vehicle]);
            TextDrawSetString(combustivelt[i], str3);
            format(str4,sizeof(str4),"~w~~d~Lataria: ~r~~h~%0.0f%%", Speedo_HP/10);
            TextDrawSetString(zustand[i], str4);
            format(str5,sizeof(str5),"~w~~d~GPS: ~p~~h~%s", ReturnPlayerZone(i));
            TextDrawSetString(gps[i], str5);
            format(str6,sizeof(str6),"~w~~d~Blindagem: ~r~~h~%d%%", Blin[vehicle]);
            TextDrawSetString(hoehe[i], str6);
            format(str7,sizeof(str7),URLALIEN);
            TextDrawSetString(url[i], str7);
        }
        SavePlayerPos[i][sX] = Speedo_X, SavePlayerPos[i][sY] = Speedo_Y, SavePlayerPos[i][sZ] = Speedo_Z;
    }
    for(new i=0; i<MAX_PLAYERS; i++)
    {
        if(!IsPlayerInAnyVehicle(i))
        {
            TextDrawHideForPlayer(i, box[i]);
            TextDrawHideForPlayer(i, fahrzeug[i]);
            TextDrawHideForPlayer(i, mph[i]);
            TextDrawHideForPlayer(i, combustivelt[i]);
            TextDrawHideForPlayer(i, zustand[i]);
            TextDrawHideForPlayer(i, gps[i]);
            TextDrawHideForPlayer(i, hoehe[i]);
            TextDrawHideForPlayer(i, url[i]);
            SpeedoON[i] = 0;
        }
        if(spawnado[i] == 1)
        {
            if(SpeedoON[i] >= 1)
            {
                TextDrawHideForPlayer(i, forum[i]);
            }
            if(SpeedoON[i] <= 0)
            {
                TextDrawShowForPlayer(i, forum[i]);
            }
        }
    }
}

http://i.imgur.com/9DkAPLn.jpg
Reply
#8

PHP код:
new TempoAutoReparar
Para reparar automбtico...
PHP код:
TempoAutoReparar SetTimerEx("AutoReparar"200true"i"playerid); 
Para parar de reparar automбtico...
PHP код:
KillTimerTempoAutoReparar ); 
PHP код:
forward AutoReparar(playerid);
public 
AutoReparar(playerid)
{
    
RepairVehicle(GetPlayerVehicleID(playerid));
    return 
1;

Reply
#9

Quote:
Originally Posted by Welconha
Посмотреть сообщение
PHP код:
new TempoAutoReparar
Para reparar automбtico...
PHP код:
TempoAutoReparar SetTimerEx("AutoReparar"200true"i"playerid); 
Para parar de reparar automбtico...
PHP код:
KillTimerTempoAutoReparar ); 
PHP код:
forward AutoReparar(playerid);
public 
AutoReparar(playerid)
{
    
RepairVehicle(GetPlayerVehicleID(playerid));
    return 
1;

Fiz isso e continuar dando o mesmo problema.
O carro sу repara em batidas, contra tiro ele nгo repara.
Alguйm sabe resolver esse problema ?
Reply
#10

Use SetVehicleHealth junto com RepairVehicle
Reply


Forum Jump:


Users browsing this thread: 5 Guest(s)