135 lines
3.0 KiB
C++
135 lines
3.0 KiB
C++
// vim: set ts=4 sw=4 tw=99 noet:
|
|
//
|
|
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
|
|
// Copyright (C) The AMX Mod X Development Team.
|
|
//
|
|
// This software is licensed under the GNU General Public License, version 3 or higher.
|
|
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
|
|
// https://alliedmods.net/amxmodx-license
|
|
|
|
//
|
|
// CSX Module
|
|
//
|
|
|
|
#ifndef CRANK_H
|
|
#define CRANK_H
|
|
|
|
#define RANK_VERSION 11
|
|
|
|
#include "amxxmodule.h"
|
|
|
|
// *****************************************************
|
|
// class Stats
|
|
// *****************************************************
|
|
|
|
struct Stats {
|
|
int hits;
|
|
int shots;
|
|
int damage;
|
|
int hs;
|
|
int tks;
|
|
int kills;
|
|
int deaths;
|
|
int bodyHits[9]; ////////////////////
|
|
|
|
// SiDLuke start
|
|
int bPlants;
|
|
int bExplosions;
|
|
int bDefusions;
|
|
int bDefused;
|
|
// SiDLuke end :D
|
|
|
|
Stats();
|
|
void commit(Stats* a);
|
|
};
|
|
|
|
// *****************************************************
|
|
// class RankSystem
|
|
// *****************************************************
|
|
|
|
class RankSystem
|
|
{
|
|
public:
|
|
class RankStats;
|
|
friend class RankStats;
|
|
class iterator;
|
|
|
|
class RankStats : public Stats {
|
|
friend class RankSystem;
|
|
friend class iterator;
|
|
RankSystem* parent;
|
|
RankStats* next;
|
|
RankStats* prev;
|
|
char* unique;
|
|
short int uniquelen;
|
|
char* name;
|
|
short int namelen;
|
|
int score;
|
|
int id;
|
|
RankStats( const char* uu, const char* nn, RankSystem* pp );
|
|
~RankStats();
|
|
void setUnique( const char* nn );
|
|
inline void goDown() {++id;}
|
|
inline void goUp() {--id;}
|
|
inline void addStats(Stats* a) { commit( a ); }
|
|
public:
|
|
void setName( const char* nn );
|
|
inline const char* getName() const { return name ? name : ""; }
|
|
inline const char* getUnique() const { return unique ? unique : ""; }
|
|
inline int getPosition() const { return id; }
|
|
inline void updatePosition( Stats* points ) {
|
|
parent->updatePos( this , points );
|
|
}
|
|
};
|
|
|
|
private:
|
|
RankStats* head;
|
|
RankStats* tail;
|
|
int rankNum;
|
|
|
|
struct scoreCalc{
|
|
AMX amx;
|
|
void* code;
|
|
int func;
|
|
cell amxAddr1;
|
|
cell amxAddr2;
|
|
cell *physAddr1;
|
|
cell *physAddr2;
|
|
} calc;
|
|
|
|
void put_before( RankStats* a, RankStats* ptr );
|
|
void put_after( RankStats* a, RankStats* ptr );
|
|
void unlink( RankStats* ptr );
|
|
void updatePos( RankStats* r , Stats* s );
|
|
|
|
public:
|
|
|
|
RankSystem();
|
|
~RankSystem();
|
|
|
|
void saveRank( const char* filename );
|
|
void loadRank( const char* filename );
|
|
RankStats* findEntryInRank(const char* unique, const char* name, bool isip=false);
|
|
bool loadCalc(const char* filename, char* error);
|
|
inline int getRankNum( ) const { return rankNum; }
|
|
void clear();
|
|
void unloadCalc();
|
|
|
|
class iterator {
|
|
RankStats* ptr;
|
|
public:
|
|
iterator(RankStats* a): ptr(a){}
|
|
inline iterator& operator--() { ptr = ptr->prev; return *this;}
|
|
inline iterator& operator++() { ptr = ptr->next; return *this; }
|
|
inline RankStats& operator*() { return *ptr;}
|
|
operator bool () { return (ptr != 0); }
|
|
};
|
|
|
|
inline iterator front() { return iterator(head); }
|
|
inline iterator begin() { return iterator(tail); }
|
|
};
|
|
|
|
|
|
#endif
|
|
|