Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * Filename: checkpoint.pwn
- * Creation: 14 SEP 2013
- * Author: Mmartin
- * Version: 1.0
- * This file is provided as is. No warranties.
- * (c) Copyright Tumbleweed Productions 2013
- */
- #define MAX_CP 10
- #define CP_ICONID_BASE 90
- #define REFRESH_INTERVAL 500
- #define SCP_FINDIT 0
- forward public Checkpoint_Init();
- forward public RefreshCheckpoint();
- forward public OnPlayerEnterSpecialCheckpoint(playerid, cpid, extraid);
- forward public OnPlayerLeaveSpecialCheckpoint(playerid, cpid, extraid);
- enum E_PLAYA_SPECIAL_CP{
- cp_extraid,
- Float:cp_x,
- Float:cp_y,
- Float:cp_z,
- cp_world,
- cp_interior,
- cp_color,
- cp_used,
- cp_iconid,
- cp_rendertype,
- cp_icontype,
- cp_drawn,
- cp_isin,
- cp_radius
- }
- new Checkpoint[MAX_PLAYERS][MAX_CP][E_PLAYA_SPECIAL_CP];
- stock fetchCheckpointID(playerid){
- for(new i = 0; i < MAX_CP; i++){
- if(!Checkpoint[playerid][i][cp_used]) return i;
- }
- return -1;
- }
- stock DrawCheckpoint(playerid, extraid, Float:x, Float:y, Float:z, icon = 0, color = 0xFF0000FF, world = -1, interior = -1, radius = 2, rendertype = MAPICON_GLOBAL_CHECKPOINT){
- new cpid = fetchCheckpointID(playerid);
- if(cpid == -1) return -1;
- Checkpoint[playerid][cpid][cp_extraid] = extraid;
- Checkpoint[playerid][cpid][cp_x] = x;
- Checkpoint[playerid][cpid][cp_y] = y;
- Checkpoint[playerid][cpid][cp_z] = z;
- Checkpoint[playerid][cpid][cp_world] = world;
- Checkpoint[playerid][cpid][cp_interior] = interior;
- Checkpoint[playerid][cpid][cp_color] = color;
- Checkpoint[playerid][cpid][cp_used] = 1;
- Checkpoint[playerid][cpid][cp_iconid] = CP_ICONID_BASE + cpid;
- Checkpoint[playerid][cpid][cp_rendertype] = rendertype;
- Checkpoint[playerid][cpid][cp_icontype] = icon;
- Checkpoint[playerid][cpid][cp_drawn] = 0;
- Checkpoint[playerid][cpid][cp_isin] = 0;
- Checkpoint[playerid][cpid][cp_radius] = radius;
- return 1;
- }
- stock ClearCheckpoint(playerid, cpid){
- if(cpid < 0 || cpid > MAX_CP) return 0;
- RemovePlayerMapIcon(playerid, Checkpoint[playerid][cpid][cp_iconid]);
- Checkpoint[playerid][cpid][cp_extraid] = 0;
- Checkpoint[playerid][cpid][cp_x] = 0.0;
- Checkpoint[playerid][cpid][cp_y] = 0.0;
- Checkpoint[playerid][cpid][cp_z] = 0.0;
- Checkpoint[playerid][cpid][cp_world] = 0;
- Checkpoint[playerid][cpid][cp_interior] = 0;
- Checkpoint[playerid][cpid][cp_color] = 0;
- Checkpoint[playerid][cpid][cp_used] = 0;
- Checkpoint[playerid][cpid][cp_iconid] = 0;
- Checkpoint[playerid][cpid][cp_rendertype] = 0;
- Checkpoint[playerid][cpid][cp_icontype] = 0;
- Checkpoint[playerid][cpid][cp_drawn] = 0;
- Checkpoint[playerid][cpid][cp_isin] = 0;
- Checkpoint[playerid][cpid][cp_radius] = 0;
- return 1;
- }
- stock IsPlayerInSpecialCheckpoint(playerid, extraid = -1, cpid = -1){
- if(cpid != -1){
- if(extraid == -1)
- if(Checkpoint[playerid][cpid][cp_isin] == 1) return true;
- else if(Checkpoint[playerid][cpid][cp_extraid] != extraid) return false; else return true;
- }else{
- for(new i = 0; i < MAX_CP; i++){
- if(Checkpoint[playerid][i][cp_isin]){
- if(extraid == -1 || Checkpoint[playerid][i][cp_extraid] == extraid) return true;
- }
- }
- return false;
- }
- }
- stock ClearAllCheckpoints(playerid){
- for(new cpid = 0; cpid < MAX_CP; cpid++){
- ClearCheckpoint(playerid, cpid);
- }
- }
- public Checkpoint_Init(){
- SetTimer("RefreshCheckpoint", REFRESH_INTERVAL, 1);
- return 1;
- }
- /*public OnPlayerEnterSpecialCheckpoint(playerid, cpid, extraid){
- return 1;
- }
- public OnPlayerLeaveSpecialCheckpoint(playerid, cpid, extraid){
- return 1;
- }*/
- public RefreshCheckpoint(){
- foreach(playerid){
- if(IsPlayerLogged(playerid)){
- for(new cpid = 0; cpid < MAX_CP; cpid++){
- if(Checkpoint[playerid][cpid][cp_used]){
- if(Checkpoint[playerid][cpid][cp_drawn]){
- if((GetPlayerVirtualWorld(playerid) != Checkpoint[playerid][cpid][cp_world] && Checkpoint[playerid][cpid][cp_world] != -1) || (GetPlayerInterior(playerid) != Checkpoint[playerid][cpid][cp_interior] && Checkpoint[playerid][cpid][cp_interior] != -1)){
- RemovePlayerMapIcon(playerid, Checkpoint[playerid][cpid][cp_iconid]);
- if(Checkpoint[playerid][cpid][cp_isin]){
- CallLocalFunction("OnPlayerLeaveSpecialCheckpoint", "ddd", playerid, cpid, Checkpoint[playerid][cpid][cp_extraid]);
- Checkpoint[playerid][cpid][cp_isin] = 0;
- }
- Checkpoint[playerid][cpid][cp_drawn] = 0;
- }else{
- if(IsPlayerInRangeOfPoint(playerid, Checkpoint[playerid][cpid][cp_radius], Checkpoint[playerid][cpid][cp_x], Checkpoint[playerid][cpid][cp_y], Checkpoint[playerid][cpid][cp_z])){
- if(!Checkpoint[playerid][cpid][cp_isin]){
- CallLocalFunction("OnPlayerEnterSpecialCheckpoint", "ddd", playerid, cpid, Checkpoint[playerid][cpid][cp_extraid]);
- Checkpoint[playerid][cpid][cp_isin] = 1;
- }
- }else{
- if(Checkpoint[playerid][cpid][cp_isin]){
- CallLocalFunction("OnPlayerLeaveSpecialCheckpoint", "ddd", playerid, cpid, Checkpoint[playerid][cpid][cp_extraid]);
- Checkpoint[playerid][cpid][cp_isin] = 0;
- }
- }
- }
- }else{
- if((GetPlayerVirtualWorld(playerid) == Checkpoint[playerid][cpid][cp_world] || Checkpoint[playerid][cpid][cp_world] == -1) || (GetPlayerInterior(playerid) == Checkpoint[playerid][cpid][cp_interior] || Checkpoint[playerid][cpid][cp_interior] == -1)){
- SetPlayerMapIcon(playerid, Checkpoint[playerid][cpid][cp_iconid], Checkpoint[playerid][cpid][cp_x], Checkpoint[playerid][cpid][cp_y], Checkpoint[playerid][cpid][cp_z], Checkpoint[playerid][cpid][cp_icontype], Checkpoint[playerid][cpid][cp_color], Checkpoint[playerid][cpid][cp_rendertype]);
- Checkpoint[playerid][cpid][cp_drawn] = 1;
- }
- }
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement