mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-28 17:20:22 +00:00
New .inc SourcePawn samples
This commit is contained in:
246
samples/SourcePawn/Check.inc
Normal file
246
samples/SourcePawn/Check.inc
Normal file
@@ -0,0 +1,246 @@
|
||||
// Checkpoint Manager
|
||||
// (c) João Pedro Lopes, All right's reserved
|
||||
//
|
||||
// Feel free to change any line above, as long as you post the 'fix' / 'patch' at the forum
|
||||
// and send a copy to jplopes@live.com.pt
|
||||
|
||||
/* natives
|
||||
native CreateCheckpoint(ownerid, chpid, Float:posX, Float:posY, Float:posZ, Float:size); // Creates a checkpoint
|
||||
native SetCheckpointInterior(chpid, interiorid); // Changes the checkpoint interior
|
||||
native SetCheckpointVirtualWorld(chpid, VirtualWorldID); // Changes the Checkpoint vWorld
|
||||
native ToggleCheckpointActive(chpid, bool:active); // Deactivates / Activates the checkpoint
|
||||
native ChangeCheckpointOwner(chpid, owner); // Change the checkpoint owner
|
||||
native RemoveCheckpoint(chpid); // Removes the specified checkpoint
|
||||
native StartCheckpointSeeking(); // Starts seeking for each individual
|
||||
native StopCheckpointSeeking(); // Stops the system
|
||||
native VerifyCheckpoint(playerid); // Place this at OnPlayerEnterCheckpoint
|
||||
*/
|
||||
|
||||
// Function Forwards
|
||||
forward public OnCheckpointEnter(playerid, checkpointid);
|
||||
|
||||
#if defined _CHECKPOINT_MANAGER_INCLUDED
|
||||
#endinput
|
||||
#endif
|
||||
|
||||
#define _CHECKPOINT_MANAGER_INCLUDED
|
||||
#pragma library CheckpointManager
|
||||
|
||||
#include <a_samp>
|
||||
|
||||
#define MAX_CHECKPOINTS 200
|
||||
#define CHECKPOINT_SEEKER_DELAY 300
|
||||
|
||||
#define GLOBAL_OWNER_ID -1
|
||||
|
||||
|
||||
// CHECKPOINT ENUMERATION
|
||||
enum _checkpointEnum{
|
||||
_chp_populated, // Is this slot of the memory populated?
|
||||
|
||||
_chp_id, // The ID of the checkpoint
|
||||
_chp_owner, // The ID of the player who this checkpoint is visible too
|
||||
|
||||
Float:_chp_posX, // The X position of this checkpoint
|
||||
Float:_chp_posY, // The Y position of this checkpoint
|
||||
Float:_chp_posZ, // The Z position of this checkpoint
|
||||
Float:_chp_size, // The checkpoint size
|
||||
Float:_chp_viewDistance, // The checkpoint view distance
|
||||
|
||||
bool:_chp_active, // Is this checkpoint active?
|
||||
|
||||
_chp_interior_id, // The interior id of this checkpoint
|
||||
_chp_world_id // The world id of this checkpoint
|
||||
};
|
||||
|
||||
// DATA ARRAYS
|
||||
new _checkpoints[MAX_CHECKPOINTS][_checkpointEnum];
|
||||
new _p_VisibleCheckpoint[MAX_PLAYERS];
|
||||
new _chp_manager_timer_id;
|
||||
|
||||
// DATA VARIABLES
|
||||
new _totalCheckpoints;
|
||||
|
||||
// --------------------------------------------------------------------------------------------------------
|
||||
// Creates a new checkpoint with some initial data
|
||||
stock CreateCheckpoint(__ownerid, __chpid, Float:__posX, Float:__posY, Float:__posZ, Float:__size){
|
||||
// Max checkpoint reached?
|
||||
if(_totalCheckpoints == MAX_CHECKPOINTS) return 0;
|
||||
|
||||
// First checkpoint? Setting everything to unpopulated
|
||||
if(!_totalCheckpoints){
|
||||
for(new i; i < MAX_PLAYERS; i++) _p_VisibleCheckpoint[i] = -1;
|
||||
for(new i; i < MAX_CHECKPOINTS; i++){
|
||||
_checkpoints[i][_chp_populated] = false;
|
||||
}
|
||||
|
||||
// Sending the Initialization Info
|
||||
printf("[Checkpoint Manager : Version 0.1.1b] System Initialized...", __chpid);
|
||||
}
|
||||
|
||||
// Getting the first open slot
|
||||
new _slot;
|
||||
for(new i = 0; i < MAX_CHECKPOINTS; i++){
|
||||
if(!_checkpoints[i][_chp_populated]){
|
||||
_slot = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Adding the new checkpoint
|
||||
_checkpoints[_slot][_chp_populated] = true;
|
||||
_checkpoints[_slot][_chp_id] = __chpid;
|
||||
_checkpoints[_slot][_chp_owner] = __ownerid;
|
||||
_checkpoints[_slot][_chp_posX] = __posX;
|
||||
_checkpoints[_slot][_chp_posY] = __posY;
|
||||
_checkpoints[_slot][_chp_posZ] = __posZ;
|
||||
_checkpoints[_slot][_chp_size] = __size;
|
||||
_checkpoints[_slot][_chp_viewDistance] = 50.0;
|
||||
_checkpoints[_slot][_chp_active] = true;
|
||||
_checkpoints[_slot][_chp_interior_id] = 0;
|
||||
_checkpoints[_slot][_chp_world_id] = 0;
|
||||
|
||||
printf("[Checkpoint Manager] Checkpoint created (%d) at slot %d", __chpid, _slot);
|
||||
printf("Checkpoint Position: { %f, %f, %f }", _checkpoints[_slot][_chp_posX], _checkpoints[_slot][_chp_posY], _checkpoints[_slot][_chp_posZ]);
|
||||
|
||||
_totalCheckpoints++;
|
||||
return 1;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------
|
||||
stock SetCheckpointInterior(__chpid, __interiorid){
|
||||
new _slot = __ChpSlotByID(__chpid);
|
||||
if(_slot > -1){
|
||||
// Valid slot?
|
||||
_checkpoints[_slot][_chp_interior_id] = __interiorid;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------
|
||||
stock SetCheckpointVirtualWorld(__chpid, __virtual_world_id){
|
||||
new _slot = __ChpSlotByID(__chpid);
|
||||
if(_slot > -1){
|
||||
_checkpoints[_slot][_chp_world_id] = __virtual_world_id;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
stock ToggleCheckpointActive(__chpid, bool:__active){
|
||||
new _slot = __ChpSlotByID(__chpid);
|
||||
if(_slot > -1){
|
||||
_checkpoints[_slot][_chp_active] = __active;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
stock ChangeCheckpointOwner(__chpid, __owner){
|
||||
new _slot = __ChpSlotByID(__chpid);
|
||||
if(_slot > -1){
|
||||
_checkpoints[_slot][_chp_owner] = __owner;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
stock RemoveCheckpoint(__chpid){
|
||||
new _slot = __ChpSlotByID(__chpid);
|
||||
if(_slot > -1){
|
||||
// Deleting the checkpoint
|
||||
_checkpoints[_slot][_chp_populated] = false;
|
||||
_checkpoints[_slot][_chp_id] = -1;
|
||||
_checkpoints[_slot][_chp_owner] = 255;
|
||||
_checkpoints[_slot][_chp_posX] = -1;
|
||||
_checkpoints[_slot][_chp_posY] = -1;
|
||||
_checkpoints[_slot][_chp_posZ] = -1;
|
||||
_checkpoints[_slot][_chp_size] = -1;
|
||||
_checkpoints[_slot][_chp_viewDistance] = -1;
|
||||
_checkpoints[_slot][_chp_active] = false;
|
||||
_checkpoints[_slot][_chp_interior_id] = -1;
|
||||
_checkpoints[_slot][_chp_world_id] = -1;
|
||||
_totalCheckpoints--;
|
||||
printf("\n[Checkpoint Manager] Checkpoint removed (ID: %d)", __chpid);
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------
|
||||
// Gets the checkpoint slot by id
|
||||
stock __ChpSlotByID(__chpid){
|
||||
for(new i; i < MAX_CHECKPOINTS; i++){
|
||||
if(_checkpoints[i][_chp_id] == __chpid) return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
forward CheckpointSeeker();
|
||||
stock StartCheckpointSeeking(){
|
||||
_chp_manager_timer_id = SetTimer("CheckpointSeeker", CHECKPOINT_SEEKER_DELAY, 1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
stock StopCheckpointSeeking(){
|
||||
KillTimer(_chp_manager_timer_id);
|
||||
return 1;
|
||||
}
|
||||
|
||||
public CheckpointSeeker(){
|
||||
new Float:__posX, Float:__posY, Float:__posZ;
|
||||
new __interior;
|
||||
new __virtualWorld;
|
||||
for(new i; i < MAX_PLAYERS; i++)
|
||||
{
|
||||
if(!IsPlayerConnected(i)) continue;
|
||||
|
||||
GetPlayerPos(i, Float:__posX, Float:__posY, Float:__posZ);
|
||||
// Is the player near a checkpoint?
|
||||
if(_p_VisibleCheckpoint[i] > -1)
|
||||
{
|
||||
// If the player is no longer near that point
|
||||
if(__posX < (_checkpoints[_p_VisibleCheckpoint[i]][_chp_posX] - _checkpoints[_p_VisibleCheckpoint[i]][_chp_viewDistance])
|
||||
|| __posX > (_checkpoints[_p_VisibleCheckpoint[i]][_chp_posX] + _checkpoints[_p_VisibleCheckpoint[i]][_chp_viewDistance])
|
||||
|| __posY < (_checkpoints[_p_VisibleCheckpoint[i]][_chp_posY] - _checkpoints[_p_VisibleCheckpoint[i]][_chp_viewDistance])
|
||||
|| __posY > (_checkpoints[_p_VisibleCheckpoint[i]][_chp_posY] + _checkpoints[_p_VisibleCheckpoint[i]][_chp_viewDistance])){
|
||||
DisablePlayerCheckpoint(i);
|
||||
_p_VisibleCheckpoint[i] = -1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Getting the player Interior and virtual world
|
||||
__interior = GetPlayerInterior(i);
|
||||
__virtualWorld = GetPlayerVirtualWorld(i);
|
||||
|
||||
// Looking for a new checkpoint
|
||||
for(new j = 0; j < MAX_CHECKPOINTS; j++){
|
||||
if(!_checkpoints[j][_chp_populated]) continue;
|
||||
if((_checkpoints[j][_chp_owner] != i) && (_checkpoints[j][_chp_owner] != -1)) continue;
|
||||
if(_checkpoints[j][_chp_interior_id] != __interior) continue;
|
||||
if(_checkpoints[j][_chp_world_id] != __virtualWorld) continue;
|
||||
|
||||
if(__posX > (_checkpoints[j][_chp_posX] - _checkpoints[j][_chp_viewDistance])
|
||||
&& __posX < (_checkpoints[j][_chp_posX] + _checkpoints[j][_chp_viewDistance])
|
||||
&& __posY > (_checkpoints[j][_chp_posY] - _checkpoints[j][_chp_viewDistance])
|
||||
&& __posY < (_checkpoints[j][_chp_posY] + _checkpoints[j][_chp_viewDistance])){
|
||||
SetPlayerCheckpoint(i, _checkpoints[j][_chp_posX], _checkpoints[j][_chp_posY], _checkpoints[j][_chp_posZ], _checkpoints[j][_chp_size]);
|
||||
_p_VisibleCheckpoint[i] = j;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
stock VerifyCheckpoint(__playerid){
|
||||
if(_p_VisibleCheckpoint[__playerid] >= 0){
|
||||
OnCheckpointEnter(__playerid, _checkpoints[_p_VisibleCheckpoint[__playerid]][_chp_id]);
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
289
samples/SourcePawn/mfile.inc
Normal file
289
samples/SourcePawn/mfile.inc
Normal file
@@ -0,0 +1,289 @@
|
||||
/* mFile 1.1 by Minokon
|
||||
*
|
||||
* (c) Copyright by Minokon 2010
|
||||
* (c) y_files Copyright by Y_Less 2010
|
||||
*
|
||||
*/
|
||||
|
||||
#if defined _mfile_included
|
||||
#endinput
|
||||
#endif
|
||||
#define _mfile_included
|
||||
|
||||
//Defines
|
||||
#define MAX_LINE_SIZE 80 //Max lenght of one line in file
|
||||
#define MAX_KEY_SIZE 50 //Max lenght of key in line (to =)
|
||||
#define MAX_VALUE_SIZE 50 //Max lenght of value in line (past =)
|
||||
#define TMP_FILE "tmpfile.txt"
|
||||
|
||||
//Natives
|
||||
/*
|
||||
native mCreateFile(const file[]);
|
||||
native mRemoveFile(const file[]);
|
||||
native mClearFile(const file[]);
|
||||
native bool:mFileExist(const file[]);
|
||||
native mRenameFile(const file[], const newname[]);
|
||||
native mFindFile(const name[], dest[], &index, sizename=sizeof dest);
|
||||
native mCreateDir(const name[]);
|
||||
native mRenameDir(const dir[], const newname[]);
|
||||
native mFindDir(const name[], dest[], &index, sizename=sizeof dest);
|
||||
native mHowLines(const file[]);
|
||||
native mRemoveNewLine(string[]); //removes "\n" from string
|
||||
native mGetString(const file[], const key[], bool:ignorecase=false);
|
||||
native mGetInt(const file[], const key[], bool:ignorecase=false);
|
||||
native mGetFloat(const file[], const key[], &Float:value);
|
||||
native mSetString(const file[], const key[], const new_value[]);
|
||||
native mSetInt(const file[], const key[], new_value);
|
||||
native mSetFloat(const file[], const key[], Float:new_value);
|
||||
native mIsSet(const file[], const key[], bool:ignorecase=false);
|
||||
native mUnSet(const file[], const key[]);
|
||||
native mIsFileEmpty(const file[]);
|
||||
native y_files
|
||||
*/
|
||||
//y_files by Y_Less Functions
|
||||
native ffind(const pattern[], filename[], len, &idx);
|
||||
native frename(const oldname[], const newname[]);
|
||||
native dfind(const pattern[], filename[], len, &idx);
|
||||
native dcreate(const name[]);
|
||||
native drename(const oldname[], const newname[]);
|
||||
|
||||
//Forwards
|
||||
forward OnFileCreated(file[]);
|
||||
forward OnFileRemoved(file[]);
|
||||
forward OnFileCleared(file[]);
|
||||
forward OnFileRenamed(oldname[], newname[]);
|
||||
forward OnDirCreated(dir[]);
|
||||
forward OnDirRenamed(oldname[], newname[]);
|
||||
|
||||
stock mCreateFile(const file[])
|
||||
{
|
||||
if(fexist(file)) fremove(file);
|
||||
new File:mfile = fopen(file, io_write);
|
||||
fclose(mfile);
|
||||
CallLocalFunction("OnFileCreated", "s", file);
|
||||
return 1;
|
||||
}
|
||||
|
||||
stock mRemoveFile(const file[])
|
||||
{
|
||||
CallLocalFunction("OnFileRemoved", "s", file);
|
||||
return fremove(file);
|
||||
}
|
||||
|
||||
stock mClearFile(const file[])
|
||||
{
|
||||
if(!fremove(file)) return 0;
|
||||
new File:mfile = fopen(file, io_write);
|
||||
fclose(mfile);
|
||||
CallLocalFunction("OnFileCleared", "s", file);
|
||||
return 1;
|
||||
}
|
||||
|
||||
stock bool:mFileExist(const file[])
|
||||
if(fexist(file)) return true; //dla ciekawych: fexist nie zwraca booleanu
|
||||
else return false;
|
||||
|
||||
stock mRenameFile(const file[], const newname[])
|
||||
{
|
||||
CallLocalFunction("OnFileRenamed", "ss", file, newname);
|
||||
return frename(file, newname);
|
||||
}
|
||||
|
||||
stock mFindFile(const name[], dest[], &index, sizename=sizeof dest)
|
||||
return ffind(name, dest, sizename, index);
|
||||
|
||||
stock mCreateDir(const name[])
|
||||
{
|
||||
CallLocalFunction("OnDirCreated", "s", name);
|
||||
return dcreate(name);
|
||||
}
|
||||
|
||||
stock mRenameDir(const dir[], const newname[])
|
||||
{
|
||||
CallLocalFunction("OnDirRenamed", "ss", dir, newname);
|
||||
return drename(dir, newname);
|
||||
}
|
||||
|
||||
stock mFindDir(const name[], dest[], &index, sizename=sizeof dest)
|
||||
return dfind(name, dest, sizename, index);
|
||||
|
||||
stock mHowLines(const file[])
|
||||
{
|
||||
new lines, str[MAX_LINE_SIZE];
|
||||
new File:mfile = fopen(file, io_read);
|
||||
while(fread(mfile, str)) lines++;
|
||||
fclose(mfile);
|
||||
return lines;
|
||||
}
|
||||
|
||||
stock mRemoveNewLine(string[])
|
||||
{
|
||||
new pos = strfind(string, "\n");
|
||||
if(pos != -1)
|
||||
{
|
||||
strdel(string, pos, pos+2);
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
stock mGetString(const file[], const key[], bool:ignorecase=false)
|
||||
{
|
||||
//Create file if not exists
|
||||
if(!fexist(file))
|
||||
{
|
||||
new File:created = fopen(file, io_write);
|
||||
fclose(created);
|
||||
}
|
||||
new //Variables
|
||||
File:mfile = fopen(file, io_read), //Open file
|
||||
str[MAX_LINE_SIZE],
|
||||
str2[MAX_KEY_SIZE],
|
||||
str3[MAX_VALUE_SIZE],
|
||||
pos;
|
||||
//Find key in file
|
||||
while(fread(mfile, str))
|
||||
{
|
||||
pos = strfind(str, "=", ignorecase);
|
||||
strmid(str2, str, 0, pos);
|
||||
if(!strcmp(str2, key, ignorecase, strlen(key)+1))
|
||||
{
|
||||
strmid(str3, str, pos+1, strlen(str));
|
||||
mRemoveNewLine(str3);
|
||||
break;
|
||||
}
|
||||
}
|
||||
fclose(mfile);
|
||||
return str3;
|
||||
}
|
||||
|
||||
stock mGetInt(const file[], const key[], bool:ignorecase=false)
|
||||
return strval(mGetString(file, key, ignorecase));
|
||||
|
||||
stock mGetFloat(const file[], const key[], &Float:value, bool:ignorecase=false)
|
||||
value = floatstr(mGetString(file, key, ignorecase));
|
||||
|
||||
stock mSetString(const file[], const key[], const new_value[])
|
||||
{
|
||||
//Create file if not exists
|
||||
if(!fexist(file))
|
||||
{
|
||||
new File:created = fopen(file, io_write);
|
||||
fclose(created);
|
||||
}
|
||||
new //Variables
|
||||
str[MAX_LINE_SIZE],
|
||||
str2[MAX_KEY_SIZE],
|
||||
str3[MAX_LINE_SIZE],
|
||||
bool:lFinded = false;
|
||||
//Open file
|
||||
new File:mfile = fopen(file, io_read);
|
||||
//Create cache file
|
||||
new File:tmpfile = fopen(TMP_FILE, io_write);
|
||||
fclose(tmpfile);
|
||||
//Open cache file
|
||||
tmpfile = fopen(TMP_FILE, io_append);
|
||||
format(str3, sizeof str3, "%s=%s\n", key, new_value);
|
||||
while(fread(mfile, str))
|
||||
{
|
||||
strmid(str2, str, 0, strfind(str, "="));
|
||||
if(!strcmp(str2, key))
|
||||
{
|
||||
fwrite(tmpfile, str3);
|
||||
lFinded = true;
|
||||
}
|
||||
else
|
||||
fwrite(tmpfile, str);
|
||||
}
|
||||
if(!lFinded) //if line not found
|
||||
fwrite(tmpfile, str3);
|
||||
//Close and remove old file
|
||||
fclose(mfile);
|
||||
fremove(file);
|
||||
//Close cache file and rename it
|
||||
fclose(tmpfile);
|
||||
frename(TMP_FILE, file);
|
||||
return 1;
|
||||
}
|
||||
|
||||
stock mSetInt(const file[], const key[], new_value)
|
||||
{
|
||||
new str[MAX_VALUE_SIZE];
|
||||
valstr(str, new_value);
|
||||
mSetString(file, key, str);
|
||||
return 1;
|
||||
}
|
||||
|
||||
stock mSetFloat(const file[], const key[], Float:new_value)
|
||||
{
|
||||
new str[MAX_VALUE_SIZE];
|
||||
format(str, sizeof str, "%f", new_value);
|
||||
return mSetString(file, key, str);
|
||||
}
|
||||
|
||||
stock bool:mIsSet(const file[], const key[], bool:ignorecase=false)
|
||||
{
|
||||
//If fexists return false
|
||||
if(!fexist(file)) return false;
|
||||
new //Variables
|
||||
File:mfile = fopen(file, io_read), //Open file
|
||||
str[MAX_LINE_SIZE],
|
||||
str2[MAX_KEY_SIZE],
|
||||
bool:finded = false;
|
||||
//Find key in file
|
||||
while(fread(mfile, str))
|
||||
{
|
||||
strmid(str2, str, 0, strfind(str, "="));
|
||||
if(!strcmp(str2, key, ignorecase, strlen(key)+1))
|
||||
{
|
||||
finded = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
fclose(mfile);
|
||||
return finded;
|
||||
}
|
||||
|
||||
stock mUnSet(const file[], const key[])
|
||||
{
|
||||
if(!fexist(file)) return 0;
|
||||
new //Variables
|
||||
str[MAX_LINE_SIZE],
|
||||
str2[MAX_KEY_SIZE];
|
||||
//Open file
|
||||
new File:mfile = fopen(file, io_read);
|
||||
//Create cache file
|
||||
new File:tmpfile = fopen(TMP_FILE, io_write);
|
||||
fclose(tmpfile);
|
||||
//Open cache file
|
||||
tmpfile = fopen(TMP_FILE, io_append);
|
||||
while(fread(mfile, str))
|
||||
{
|
||||
strmid(str2, str, 0, strfind(str, "="));
|
||||
if(strcmp(str2, key) != 0)
|
||||
fwrite(tmpfile, str);
|
||||
}
|
||||
//Close and remove old file
|
||||
fclose(mfile);
|
||||
fremove(file);
|
||||
//Close cache file and rename it
|
||||
fclose(tmpfile);
|
||||
frename(TMP_FILE, file);
|
||||
return 1;
|
||||
}
|
||||
|
||||
stock bool:mIsFileEmpty(const file[])
|
||||
{
|
||||
if(!fexist(file)) return true;
|
||||
new File:mfile = fopen(file, io_read);
|
||||
if(flength(mfile) <= 1)
|
||||
{
|
||||
fclose(mfile);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
fclose(mfile);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user