[Ajuda]reparo em checkpoint
#1

gostaria de saber como que ao player passar por um checkpoint seu carro seja reparado altomaticamente
Reply
#2

pawn Код:
public OnPlayerEnterCheckpoint(playerid)
{
    RepairVehicle(GetPlayerVehicleID(playerid));
    return 1;
}
Reply
#3

salvar como cpstream.inc
pawn Код:
//////////////////////////////////////////////////
//////////////////////////////////////////////////
///        Matraka's Checkpoint Streamer       ///
///                                            ///
/// Author: [MPA]matraka_IDG                   ///
/// Contact: msn_matraka@gtabrasil.net         ///
///                                            ///
///   ---===Infernus Development Group===---   ///
//////////////////////////////////////////////////
//////////////////////////////////////////////////

#include <a_samp>

/*Natives
native CPS_AddCheckpoint(Float:X,Float:Y,Float:Z,Float:size,Float:spawn_dist);
native CPS_IsPlayerInCheckpoint(playerid,cpid);
native CPS_IsPlayerInAnyCheckpoint(playerid,cpid);
native CPS_RemoveCheckpoint(cpid);
native CPS_GetPlayerCheckpoint(playerid);
*/


#define MAX_CHECKPOINTS 500

forward CPSERVICE_Handler();
enum cpinfo
{
    Float:cpX,
    Float:cpY,
    Float:cpZ,
    Float:cpsz,
    cpsd,
};
new CPSERVICE_active;
new Checkpoints[MAX_CHECKPOINTS][cpinfo];
new UsedCPSlot[MAX_CHECKPOINTS];
new CPSERVICE_actualcp[MAX_PLAYERS];

stock CPS_AddCheckpoint(Float:X,Float:Y,Float:Z,Float:size,spawn_dist)
{
    new cpid=1;
    while(UsedCPSlot[cpid] == 1) cpid++;
    if(CPSERVICE_active == 0){
        SetTimer("CPSERVICE_Handler",500,true);
        CPSERVICE_active=1;
    }
    UsedCPSlot[cpid]=1;
    Checkpoints[cpid][cpX]=X;
    Checkpoints[cpid][cpY]=Y;
    Checkpoints[cpid][cpZ]=Z;
    Checkpoints[cpid][cpsz]=size;
    Checkpoints[cpid][cpsd]=spawn_dist;
    return cpid;
}

stock CPS_IsPlayerInCheckpoint(playerid,cpid)
{
    if(!IsPlayerInCheckpoint(playerid)) return 0;
    if(CPSERVICE_actualcp[playerid] == cpid) return 1;
    else return 0;
}

stock CPS_IsPlayerInAnyCheckpoint(playerid)
{
    if(!IsPlayerInCheckpoint(playerid)) return 0;
    if(CPSERVICE_actualcp[playerid] == 0) return 0;
    else return 1;
}

stock CPS_GetPlayerCheckpoint(playerid) if(!IsPlayerInCheckpoint(playerid)) return 0; else return CPSERVICE_actualcp[playerid];

stock CPS_RemoveCheckpoint(cpid)
{
    if(cpid == 0 || UsedCPSlot[cpid] == 0) return 0;
    UsedCPSlot[cpid]=0;
    return 1;
}

public CPSERVICE_Handler()
{
    for(new i; i<MAX_PLAYERS; i++){
        new Float:prevdist = 100000.000;
        new prevcp;
        for(new cpid=1; cpid < MAX_CHECKPOINTS; cpid++){
            if(UsedCPSlot[cpid]) {
                new Float:dist;
                dist = CPSERVICE_getdist(i,Checkpoints[cpid][cpX],Checkpoints[cpid][cpY],Checkpoints[cpid][cpZ]);
                if(dist < prevdist){
                    prevdist = dist;
                    prevcp = cpid;
                }
            }
        }
        new cpid=prevcp;
        if(CPSERVICE_getdist(i,Checkpoints[cpid][cpX],Checkpoints[cpid][cpY],Checkpoints[cpid][cpZ]) < Checkpoints[cpid][cpsd]) {
            if(CPSERVICE_actualcp[i] != cpid){
                SetPlayerCheckpoint(i,Checkpoints[cpid][cpX],Checkpoints[cpid][cpY],Checkpoints[cpid][cpZ],Checkpoints[cpid][cpsz]);
                CPSERVICE_actualcp[i] = cpid;
            }
        } else {
            if(CPSERVICE_actualcp[i] != 0){
                CPSERVICE_actualcp[i] = 0;
                DisablePlayerCheckpoint(i);
            }
        }
    }
    return 1;
}

stock CPSERVICE_getdist(playerid,Float:x2,Float:y2,Float:z2)
{
    new Float:x1,Float:y1,Float:z1;
    new Float:tmpdis;
    GetPlayerPos(playerid,x1,y1,z1);
    tmpdis = floatsqroot(floatpower(floatabs(floatsub(x2,x1)),2)+floatpower(floatabs(floatsub(y2,y1)),2)+floatpower(floatabs(floatsub(z2,z1)),2));
    return floatround(tmpdis);
}

exemplo :
pawn Код:
public OnGameModeInit()

CPS_AddCheckpoint(2128.3621,2207.5833,10.2227, 8.0, 100); //race1
pawn Код:
public OnPlayerEnterCheckpoint(playerid){

new checkpointid = CPS_GetPlayerCheckpoint(playerid);
if(checkpointid >= 1 && checkpointid <= 11){  // vc tem que contar os check.. nesse caso sгo 1 de 11 com a msm funзгo.. 1 sу e 1 de 1 o segundo 2 de 2.. e assim em diante..

new VehicleID;VehicleID = GetPlayerVehicleID(playerid);
AddVehicleComponent(VehicleID, 1010); //TUNE
RepairVehicle(VehicleID);
GameTextForPlayer(playerid,"~r~ Pronto ~w~Pra Um Racha ~r~!!", 1000, 1);
}
return 1;
}
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)