mirror of
https://github.com/alliedmodders/amxmodx.git
synced 2024-12-25 06:15:37 +03:00
added new functions
This commit is contained in:
parent
959a5b9225
commit
1cc60fc9ad
@ -78,4 +78,76 @@ void CPlayer::getTeamName(char * szName ){
|
|||||||
for (int i=0;i<16;i++){
|
for (int i=0;i<16;i++){
|
||||||
szName[i] = *( (char*)pEdict->pvPrivateData + STEAM_PDOFFSET_TEAMNAME + i );
|
szName[i] = *( (char*)pEdict->pvPrivateData + STEAM_PDOFFSET_TEAMNAME + i );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CObjective::SetKeyValue( int index, char *keyname, char *value ){
|
||||||
|
|
||||||
|
KeyValueData pkvd;
|
||||||
|
|
||||||
|
pkvd.szClassName = (char *)STRING(obj[index].pEdict->v.classname);
|
||||||
|
pkvd.szKeyName = keyname; // type
|
||||||
|
pkvd.szValue = value;
|
||||||
|
pkvd.fHandled = false;
|
||||||
|
|
||||||
|
MDLL_KeyValue(obj[index].pEdict, &pkvd);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void CObjective::InitObj(int dest , edict_t* ed ){
|
||||||
|
MESSAGE_BEGIN( dest, gmsgInitObj,0,ed );
|
||||||
|
WRITE_BYTE( count );
|
||||||
|
for ( int i=0; i<count; i++ ){
|
||||||
|
WRITE_SHORT(ENTINDEX(obj[i].pEdict));
|
||||||
|
WRITE_BYTE( obj[i].index );
|
||||||
|
WRITE_BYTE( obj[i].owner );
|
||||||
|
WRITE_BYTE( obj[i].visible );
|
||||||
|
WRITE_BYTE( obj[i].icon_neutral );
|
||||||
|
WRITE_BYTE( obj[i].icon_allies );
|
||||||
|
WRITE_BYTE( obj[i].icon_axis );
|
||||||
|
WRITE_COORD( obj[i].origin_x );
|
||||||
|
WRITE_COORD( obj[i].origin_y );
|
||||||
|
}
|
||||||
|
MESSAGE_END();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CObjective::SetObj(int index){
|
||||||
|
MESSAGE_BEGIN(MSG_ALL,gmsgSetObj);
|
||||||
|
WRITE_BYTE(obj[index].index);
|
||||||
|
WRITE_BYTE(obj[index].owner);
|
||||||
|
WRITE_BYTE(0);
|
||||||
|
MESSAGE_END();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CObjective::UpdateOwner(int index, int team){
|
||||||
|
obj[index].owner = team;
|
||||||
|
GET_CP_PD(obj[index].pEdict).owner = team;
|
||||||
|
|
||||||
|
switch ( team ){
|
||||||
|
case 0:
|
||||||
|
obj[index].pEdict->v.model = MAKE_STRING( GET_CP_PD(obj[index].pEdict).model_neutral );
|
||||||
|
obj[index].pEdict->v.body = GET_CP_PD(obj[index].pEdict).model_body_neutral;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
obj[index].pEdict->v.model = MAKE_STRING( GET_CP_PD(obj[index].pEdict).model_allies );
|
||||||
|
obj[index].pEdict->v.body = GET_CP_PD(obj[index].pEdict).model_body_allies;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
obj[index].pEdict->v.model = MAKE_STRING( GET_CP_PD(obj[index].pEdict).model_axis );
|
||||||
|
obj[index].pEdict->v.body = GET_CP_PD(obj[index].pEdict).model_body_axis;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
mObjects.SetObj(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CObjective::Sort(){
|
||||||
|
objinfo_t temp;
|
||||||
|
for (int j=0;j<count-1;j++ ){
|
||||||
|
for (int i=0;i<count-1;i++ ){
|
||||||
|
if ( obj[i].index > obj[i+1].index ){
|
||||||
|
temp = obj[i+1];
|
||||||
|
obj[i+1] = obj[i];
|
||||||
|
obj[i] = temp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
@ -33,19 +33,162 @@
|
|||||||
#define CMISC_H
|
#define CMISC_H
|
||||||
|
|
||||||
#ifndef __linux__
|
#ifndef __linux__
|
||||||
#define LINUXOFFSET 0
|
#define LINUXOFFSET 0
|
||||||
#else
|
#else
|
||||||
#define LINUXOFFSET 5
|
#define LINUXOFFSET 5
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define DODFUN_VERSION "0.1"
|
#define DODFUN_VERSION "1.0.2"
|
||||||
|
|
||||||
#define STEAM_PDOFFSET_WDEPLOY 229 + LINUXOFFSET // weapon deploy
|
// DoD Player
|
||||||
|
#define STEAM_PDOFFSET_WDEPLOY 229 + LINUXOFFSET // weapon deploy
|
||||||
|
|
||||||
|
#define STEAM_PDOFFSET_TEAMNAME 1396 + (LINUXOFFSET * sizeof(char)) // team name 349 char[16]
|
||||||
#define STEAM_PDOFFSET_CLASS 366 + LINUXOFFSET // player class
|
#define STEAM_PDOFFSET_CLASS 366 + LINUXOFFSET // player class
|
||||||
#define STEAM_PDOFFSET_RCLASS 367 + LINUXOFFSET // random class
|
#define STEAM_PDOFFSET_RCLASS 367 + LINUXOFFSET // random class
|
||||||
|
|
||||||
#define STEAM_PDOFFSET_SCORE 475 + LINUXOFFSET // score
|
#define STEAM_PDOFFSET_SCORE 475 + LINUXOFFSET // score
|
||||||
#define STEAM_PDOFFSET_DEATHS 476 + LINUXOFFSET // deaths
|
#define STEAM_PDOFFSET_DEATHS 476 + LINUXOFFSET // deaths
|
||||||
#define STEAM_PDOFFSET_TEAMNAME 1396 + LINUXOFFSET // team name
|
|
||||||
|
// DoD Control Point
|
||||||
|
struct pd_dcp {
|
||||||
|
int iunk_0;
|
||||||
|
#ifndef __linux__
|
||||||
|
int iunk_1; // windows only
|
||||||
|
#endif
|
||||||
|
int iunk_2; // pointer edict_t*
|
||||||
|
int iunk_3;
|
||||||
|
|
||||||
|
float origin_x;
|
||||||
|
float origin_y;
|
||||||
|
float origin_z; // 6
|
||||||
|
|
||||||
|
float mins_x;
|
||||||
|
float mins_y;
|
||||||
|
float mins_z;
|
||||||
|
|
||||||
|
float maxs_x;
|
||||||
|
float maxs_y;
|
||||||
|
float maxs_z;
|
||||||
|
|
||||||
|
float angles_x;
|
||||||
|
float angles_y;
|
||||||
|
float angles_z; // 15
|
||||||
|
|
||||||
|
// 19 - spawnflags ?
|
||||||
|
// 20-int , always 1
|
||||||
|
int unknown_block1[19];
|
||||||
|
int iunk_35; // pointer entvars_t*
|
||||||
|
int iunk_36; // pointer entvars_t*
|
||||||
|
int unknown_block2[52];
|
||||||
|
int iunk_89; // pointer entvars_t*
|
||||||
|
#ifdef __linux__
|
||||||
|
int iunk_extra1;
|
||||||
|
int iunk_extra2;
|
||||||
|
int iunk_extra3;
|
||||||
|
int iunk_extra4;
|
||||||
|
#endif
|
||||||
|
int owner; // 90
|
||||||
|
int iunk_91;
|
||||||
|
int iunk_92;
|
||||||
|
int default_owner; // 93
|
||||||
|
int flag_id;
|
||||||
|
int pointvalue;
|
||||||
|
int points_for_player;
|
||||||
|
int points_for_team;
|
||||||
|
float funk_98; // always 1.0
|
||||||
|
float cap_time;
|
||||||
|
char win_string[256]; // 100 MAP_PLAYER_CAP , %p player , %n pointname , %t teamname
|
||||||
|
int iunk_164;
|
||||||
|
int iunk_165;
|
||||||
|
char target_allies[256]; // 166
|
||||||
|
char target_axis[256]; // 230
|
||||||
|
char target_reset[256];
|
||||||
|
char model_allies[256]; // 358
|
||||||
|
char model_axis[256]; // 422
|
||||||
|
char model_neutral[256]; // 486
|
||||||
|
int model_body_allies; // 550
|
||||||
|
int model_body_axis;
|
||||||
|
int model_body_neutral;
|
||||||
|
int icon_allies;
|
||||||
|
int icon_axis;
|
||||||
|
int icon_neutral;
|
||||||
|
int can_touch; // flags : 1-allies can't, 256-axis can't , default 0 (all can)
|
||||||
|
int iunk_557;
|
||||||
|
int iunk_558; // ? -2 , 4
|
||||||
|
char pointgroup[256];
|
||||||
|
int iunk_623;
|
||||||
|
int iunk_624;
|
||||||
|
int iunk_625;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define GET_CP_PD( x ) (*(pd_dcp*)x->pvPrivateData)
|
||||||
|
|
||||||
|
// DoD Capture Area
|
||||||
|
struct pd_dca {
|
||||||
|
int iunk_0;
|
||||||
|
int iunk_1;
|
||||||
|
int iunk_2;
|
||||||
|
#ifndef __linux__
|
||||||
|
int iunk_3; // if def windows
|
||||||
|
#endif
|
||||||
|
|
||||||
|
float origin_x;
|
||||||
|
float origin_y;
|
||||||
|
float origin_z; // 6
|
||||||
|
|
||||||
|
float mins_x;
|
||||||
|
float mins_y;
|
||||||
|
float mins_z;
|
||||||
|
|
||||||
|
float maxs_x;
|
||||||
|
float maxs_y;
|
||||||
|
float maxs_z;
|
||||||
|
|
||||||
|
float angles_x;
|
||||||
|
float angles_y;
|
||||||
|
float angles_z; // 15
|
||||||
|
|
||||||
|
// 16-135
|
||||||
|
#ifndef __linux__
|
||||||
|
int unknown_block_16[111];
|
||||||
|
#else
|
||||||
|
int unknown_block_16[116]; // linux +5 more
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int time_to_cap; // 127
|
||||||
|
int iunk_128;
|
||||||
|
int allies_numcap; // 129
|
||||||
|
int axis_numcap; // 130
|
||||||
|
|
||||||
|
int iunk_131;
|
||||||
|
int iunk_132;
|
||||||
|
|
||||||
|
int can_cap; // 133 flags : 1-allies can , 256-axis can, default 257 (all can)
|
||||||
|
|
||||||
|
int iunk_134;
|
||||||
|
int iunk_135;
|
||||||
|
|
||||||
|
char allies_endcap[256]; // 136
|
||||||
|
char axis_endcap[256]; // 200
|
||||||
|
char allies_startcap[256]; // 264
|
||||||
|
char axis_startcap[256]; // 328
|
||||||
|
char allies_breakcap[256]; // 392
|
||||||
|
char axis_breakcap[256]; // 456
|
||||||
|
int iunk_520; // -1 allies area, blowable (charlie) ??
|
||||||
|
char hud_sprite[256]; // 521
|
||||||
|
|
||||||
|
// 585 - 649
|
||||||
|
int unknown_block_585[65];
|
||||||
|
|
||||||
|
char object_group[256]; // 650
|
||||||
|
int iunk_714;
|
||||||
|
int iunk_715;
|
||||||
|
int iunk_716;
|
||||||
|
// 717 size
|
||||||
|
};
|
||||||
|
|
||||||
|
#define GET_CA_PD( x ) (*(pd_dca*)x->pvPrivateData)
|
||||||
|
|
||||||
/* DoD weapons */
|
/* DoD weapons */
|
||||||
enum {
|
enum {
|
||||||
@ -99,7 +242,7 @@ public:
|
|||||||
bool staminaSet;
|
bool staminaSet;
|
||||||
|
|
||||||
bool fuseSet;
|
bool fuseSet;
|
||||||
int fuseType; // 1<<0 - for new , 1<<1 - for catched
|
int fuseType; // 1<<0 - for new , 1<<1 - for cought
|
||||||
float nadeFuse;
|
float nadeFuse;
|
||||||
|
|
||||||
bool ingame;
|
bool ingame;
|
||||||
@ -122,7 +265,84 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef struct objinfo_s {
|
||||||
|
// initobj
|
||||||
|
edict_t* pEdict;
|
||||||
|
int index;
|
||||||
|
int default_owner;
|
||||||
|
int visible;
|
||||||
|
int icon_neutral;
|
||||||
|
int icon_allies;
|
||||||
|
int icon_axis;
|
||||||
|
float origin_x;
|
||||||
|
float origin_y;
|
||||||
|
// setobj
|
||||||
|
int owner;
|
||||||
|
// control area
|
||||||
|
int areaflags; // 0-need check , 1-no area , 2-found area
|
||||||
|
edict_t* pAreaEdict;
|
||||||
|
} objinfo_t;
|
||||||
|
|
||||||
|
class CObjective {
|
||||||
|
public:
|
||||||
|
int count;
|
||||||
|
objinfo_t obj[12];
|
||||||
|
inline void Clear() { count = 0; memset(obj,0,sizeof(objinfo_s)); }
|
||||||
|
void SetKeyValue( int index, char *keyname, char *value );
|
||||||
|
|
||||||
|
void InitObj(int dest = MSG_ALL , edict_t* ed = NULL);
|
||||||
|
void SetObj(int index);
|
||||||
|
|
||||||
|
void UpdateOwner( int index, int team );
|
||||||
|
void Sort();
|
||||||
|
};
|
||||||
|
|
||||||
|
enum CP_VALUE {
|
||||||
|
CP_edict = 1,
|
||||||
|
CP_area,
|
||||||
|
CP_index,
|
||||||
|
CP_owner,
|
||||||
|
CP_default_owner,
|
||||||
|
CP_visible,
|
||||||
|
CP_icon_neutral,
|
||||||
|
CP_icon_allies,
|
||||||
|
CP_icon_axis,
|
||||||
|
CP_origin_x,
|
||||||
|
CP_origin_y,
|
||||||
|
|
||||||
|
CP_can_touch,
|
||||||
|
CP_pointvalue,
|
||||||
|
|
||||||
|
CP_points_for_cap,
|
||||||
|
CP_team_points,
|
||||||
|
|
||||||
|
CP_model_body_neutral,
|
||||||
|
CP_model_body_allies,
|
||||||
|
CP_model_body_axis,
|
||||||
|
|
||||||
|
// strings
|
||||||
|
CP_name,
|
||||||
|
CP_reset_capsound,
|
||||||
|
CP_allies_capsound,
|
||||||
|
CP_axis_capsound,
|
||||||
|
CP_targetname,
|
||||||
|
|
||||||
|
CP_model_neutral,
|
||||||
|
CP_model_allies,
|
||||||
|
CP_model_axis,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum CA_VALUE {
|
||||||
|
CA_edict = 1,
|
||||||
|
CA_allies_numcap,
|
||||||
|
CA_axis_numcap,
|
||||||
|
CA_timetocap,
|
||||||
|
CA_can_cap,
|
||||||
|
|
||||||
|
// strings
|
||||||
|
CA_target,
|
||||||
|
CA_sprite,
|
||||||
|
};
|
||||||
|
|
||||||
#endif // CMISC_H
|
#endif // CMISC_H
|
||||||
|
|
||||||
|
@ -41,7 +41,6 @@ static cell AMX_NATIVE_CALL set_user_class(AMX *amx, cell *params){
|
|||||||
if ( !pPlayer->ingame )
|
if ( !pPlayer->ingame )
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|
||||||
if (iClass){
|
if (iClass){
|
||||||
*( (int*)pPlayer->pEdict->pvPrivateData + STEAM_PDOFFSET_CLASS) = iClass;
|
*( (int*)pPlayer->pEdict->pvPrivateData + STEAM_PDOFFSET_CLASS) = iClass;
|
||||||
*( (int*)pPlayer->pEdict->pvPrivateData + STEAM_PDOFFSET_RCLASS) = 0; // disable random class
|
*( (int*)pPlayer->pEdict->pvPrivateData + STEAM_PDOFFSET_RCLASS) = 0; // disable random class
|
||||||
@ -439,34 +438,294 @@ static cell AMX_NATIVE_CALL get_user_ammo(AMX *amx, cell *params){
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static cell AMX_NATIVE_CALL objective_set_data(AMX *amx, cell *params){ // index, key, ivalue , szvalue
|
||||||
static cell AMX_NATIVE_CALL test_pd(AMX *amx, cell *params){
|
|
||||||
int index = params[1];
|
int index = params[1];
|
||||||
CHECK_PLAYER(index);
|
if ( index < 0 || index > mObjects.count ){
|
||||||
int type = params[2];
|
MF_LogError(amx, AMX_ERR_NATIVE, "Index out of range (%d)", index);
|
||||||
CPlayer* pPlayer = GET_PLAYER_POINTER_I(index);
|
return 0;
|
||||||
if (pPlayer->ingame){
|
|
||||||
int i;
|
|
||||||
FILE *bp = fopen("pdtest.txt","at");
|
|
||||||
for ( i=1;i<1000;i++ ){
|
|
||||||
switch(type){
|
|
||||||
case 0: fprintf(bp,"%d %d\n",i,*( (int*)pPlayer->pEdict->pvPrivateData + i));
|
|
||||||
break;
|
|
||||||
case 1: fprintf(bp,"%d %f\n",i,*( (float*)pPlayer->pEdict->pvPrivateData + i));
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
fprintf(bp,"%d %c\n",i+1000,*( (char*)pPlayer->pEdict->pvPrivateData + i + 1000));
|
|
||||||
break;
|
|
||||||
//MF_PrintSrvConsole("",*( (int*)pPlayer->pEdict->pvPrivateData + i) );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fclose(bp);
|
|
||||||
}
|
}
|
||||||
return 0;
|
|
||||||
|
edict_t *pent = mObjects.obj[index].pEdict;
|
||||||
|
|
||||||
|
int iLen;
|
||||||
|
int ivalue = params[3];
|
||||||
|
char *szValue = MF_GetAmxString(amx, params[4], 0, &iLen);
|
||||||
|
|
||||||
|
CP_VALUE key = (CP_VALUE)params[2];
|
||||||
|
switch ( key ){
|
||||||
|
case CP_owner :
|
||||||
|
mObjects.UpdateOwner( index, ivalue );
|
||||||
|
return 1;
|
||||||
|
case CP_default_owner :
|
||||||
|
mObjects.obj[index].default_owner = ivalue;
|
||||||
|
GET_CP_PD(pent).default_owner = ivalue;
|
||||||
|
return 1;
|
||||||
|
case CP_visible :
|
||||||
|
mObjects.obj[index].visible = ivalue;
|
||||||
|
mObjects.obj[index].pEdict->v.spawnflags = 1 - ivalue;
|
||||||
|
return 1;
|
||||||
|
case CP_icon_neutral :
|
||||||
|
mObjects.obj[index].icon_neutral = ivalue;
|
||||||
|
GET_CP_PD(pent).icon_neutral = ivalue;
|
||||||
|
return 1;
|
||||||
|
case CP_icon_allies :
|
||||||
|
mObjects.obj[index].icon_allies = ivalue;
|
||||||
|
GET_CP_PD(pent).icon_allies = ivalue;
|
||||||
|
return 1;
|
||||||
|
case CP_icon_axis :
|
||||||
|
mObjects.obj[index].icon_axis = ivalue;
|
||||||
|
GET_CP_PD(pent).icon_axis = ivalue;
|
||||||
|
return 1;
|
||||||
|
case CP_origin_x :
|
||||||
|
mObjects.obj[index].origin_x = (float)ivalue;
|
||||||
|
// reinit
|
||||||
|
return 1;
|
||||||
|
case CP_origin_y :
|
||||||
|
mObjects.obj[index].origin_y = (float)ivalue;
|
||||||
|
// reinit
|
||||||
|
return 1;
|
||||||
|
case CP_can_touch :
|
||||||
|
GET_CP_PD(pent).can_touch = ivalue;
|
||||||
|
return 1;
|
||||||
|
case CP_pointvalue :
|
||||||
|
GET_CP_PD(pent).pointvalue = ivalue;
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
case CP_points_for_cap :
|
||||||
|
GET_CP_PD(pent).points_for_player = ivalue;
|
||||||
|
return 1;
|
||||||
|
case CP_team_points :
|
||||||
|
GET_CP_PD(pent).points_for_team = ivalue;
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
case CP_model_body_neutral :
|
||||||
|
GET_CP_PD(pent).model_body_neutral = ivalue;
|
||||||
|
return 1;
|
||||||
|
case CP_model_body_allies :
|
||||||
|
GET_CP_PD(pent).model_body_axis = ivalue;
|
||||||
|
return 1;
|
||||||
|
case CP_model_body_axis :
|
||||||
|
GET_CP_PD(pent).model_body_axis = ivalue;
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
// Strings
|
||||||
|
|
||||||
|
case CP_name :
|
||||||
|
mObjects.obj[index].pEdict->v.netname = MAKE_STRING(szValue);
|
||||||
|
return 1;
|
||||||
|
case CP_reset_capsound :
|
||||||
|
mObjects.obj[index].pEdict->v.noise = MAKE_STRING(szValue);
|
||||||
|
return 1;
|
||||||
|
case CP_allies_capsound :
|
||||||
|
mObjects.obj[index].pEdict->v.noise1 = MAKE_STRING(szValue);
|
||||||
|
return 1;
|
||||||
|
case CP_axis_capsound :
|
||||||
|
mObjects.obj[index].pEdict->v.noise2 = MAKE_STRING(szValue);
|
||||||
|
return 1;
|
||||||
|
case CP_targetname :
|
||||||
|
mObjects.obj[index].pEdict->v.targetname = MAKE_STRING(szValue);
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
case CP_model_neutral :
|
||||||
|
strcpy(GET_CP_PD(pent).model_neutral,szValue);
|
||||||
|
return 1;
|
||||||
|
case CP_model_allies :
|
||||||
|
strcpy(GET_CP_PD(pent).model_allies,szValue);
|
||||||
|
return 1;
|
||||||
|
case CP_model_axis :
|
||||||
|
strcpy(GET_CP_PD(pent).model_axis,szValue);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static cell AMX_NATIVE_CALL objective_get_data(AMX *amx, cell *params){ // flagid, key, ivalue szvalue[],len=0
|
||||||
|
int index = params[1];
|
||||||
|
if ( index < 0 || index > mObjects.count ){
|
||||||
|
MF_LogError(amx, AMX_ERR_NATIVE, "Index out of range (%d)", index);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
int len = params[4];
|
||||||
|
CP_VALUE key = (CP_VALUE)params[2];
|
||||||
|
|
||||||
|
switch ( key ){
|
||||||
|
case CP_edict :
|
||||||
|
return ENTINDEX(mObjects.obj[index].pEdict);
|
||||||
|
case CP_area :
|
||||||
|
GET_CAPTURE_AREA(index)
|
||||||
|
return mObjects.obj[index].areaflags == 2 ? ENTINDEX(mObjects.obj[index].pAreaEdict) : 0;
|
||||||
|
case CP_owner :
|
||||||
|
return mObjects.obj[index].owner;
|
||||||
|
case CP_default_owner :
|
||||||
|
return mObjects.obj[index].default_owner;
|
||||||
|
case CP_visible :
|
||||||
|
return mObjects.obj[index].visible;
|
||||||
|
case CP_icon_neutral :
|
||||||
|
return mObjects.obj[index].icon_neutral;
|
||||||
|
case CP_icon_allies :
|
||||||
|
return mObjects.obj[index].icon_allies;
|
||||||
|
case CP_icon_axis :
|
||||||
|
return mObjects.obj[index].icon_axis;
|
||||||
|
case CP_origin_x :
|
||||||
|
return (int)mObjects.obj[index].origin_x;
|
||||||
|
case CP_origin_y :
|
||||||
|
return (int)mObjects.obj[index].origin_y;
|
||||||
|
case CP_can_touch :
|
||||||
|
return GET_CP_PD( mObjects.obj[index].pEdict ).can_touch;
|
||||||
|
case CP_pointvalue :
|
||||||
|
return GET_CP_PD( mObjects.obj[index].pEdict ).pointvalue;
|
||||||
|
|
||||||
|
case CP_points_for_cap :
|
||||||
|
return GET_CP_PD( mObjects.obj[index].pEdict ).points_for_player;
|
||||||
|
case CP_team_points :
|
||||||
|
return GET_CP_PD( mObjects.obj[index].pEdict ).points_for_team;
|
||||||
|
|
||||||
|
case CP_model_body_neutral :
|
||||||
|
return GET_CP_PD(mObjects.obj[index].pEdict).model_body_neutral;
|
||||||
|
case CP_model_body_allies :
|
||||||
|
return GET_CP_PD(mObjects.obj[index].pEdict).model_body_allies;
|
||||||
|
case CP_model_body_axis :
|
||||||
|
return GET_CP_PD(mObjects.obj[index].pEdict).model_body_axis;
|
||||||
|
|
||||||
|
// strings
|
||||||
|
|
||||||
|
case CP_name :
|
||||||
|
if ( len ){
|
||||||
|
MF_SetAmxString(amx,params[3],STRING(mObjects.obj[index].pEdict->v.netname),len);
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
case CP_reset_capsound :
|
||||||
|
if ( len ){
|
||||||
|
MF_SetAmxString(amx,params[3],STRING(mObjects.obj[index].pEdict->v.noise),len);
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
case CP_allies_capsound :
|
||||||
|
if ( len ){
|
||||||
|
MF_SetAmxString(amx,params[3],STRING(mObjects.obj[index].pEdict->v.noise1),len);
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
case CP_axis_capsound :
|
||||||
|
if ( len ){
|
||||||
|
MF_SetAmxString(amx,params[3],STRING(mObjects.obj[index].pEdict->v.noise2),len);
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
case CP_targetname :
|
||||||
|
if ( len ){
|
||||||
|
MF_SetAmxString(amx,params[3],STRING(mObjects.obj[index].pEdict->v.targetname),len);
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
case CP_model_neutral :
|
||||||
|
if ( len ){
|
||||||
|
MF_SetAmxString(amx,params[3],GET_CP_PD(mObjects.obj[index].pEdict).model_neutral,len);
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
case CP_model_allies :
|
||||||
|
if ( len ){
|
||||||
|
MF_SetAmxString(amx,params[3],GET_CP_PD(mObjects.obj[index].pEdict).model_allies,len);
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
case CP_model_axis :
|
||||||
|
if ( len ){
|
||||||
|
MF_SetAmxString(amx,params[3],GET_CP_PD(mObjects.obj[index].pEdict).model_axis,len);
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static cell AMX_NATIVE_CALL objectives_get_num(AMX *amx, cell *params){
|
||||||
|
return mObjects.count;
|
||||||
|
}
|
||||||
|
|
||||||
|
static cell AMX_NATIVE_CALL objectives_reinit(AMX *amx, cell *params){ // index
|
||||||
|
int player = params[1];
|
||||||
|
if ( player < 0 || player > gpGlobals->maxClients ){
|
||||||
|
MF_LogError(amx, AMX_ERR_NATIVE, "Index out of range (%d)", player);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
mObjects.InitObj( player == 0 ? MSG_ALL:MSG_ONE, player == 0 ? NULL:INDEXENT(player) );
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static cell AMX_NATIVE_CALL area_get_data(AMX *amx, cell *params){ // flagid, key, ivalue szvalue[],len=0
|
||||||
|
int index = params[1];
|
||||||
|
if ( index < 0 || index > mObjects.count ){
|
||||||
|
MF_LogError(amx, AMX_ERR_NATIVE, "Index out of range (%d)", index);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
int len = params[4];
|
||||||
|
CA_VALUE key = (CA_VALUE)params[2];
|
||||||
|
|
||||||
|
GET_CAPTURE_AREA(index)
|
||||||
|
|
||||||
|
switch ( key ){
|
||||||
|
case CA_edict :
|
||||||
|
return ENTINDEX(mObjects.obj[index].pAreaEdict);
|
||||||
|
case CA_allies_numcap :
|
||||||
|
return GET_CA_PD( mObjects.obj[index].pAreaEdict ).allies_numcap;
|
||||||
|
case CA_axis_numcap :
|
||||||
|
return GET_CA_PD( mObjects.obj[index].pAreaEdict ).axis_numcap;
|
||||||
|
case CA_timetocap :
|
||||||
|
return GET_CA_PD( mObjects.obj[index].pAreaEdict ).time_to_cap;
|
||||||
|
case CA_can_cap :
|
||||||
|
return GET_CA_PD( mObjects.obj[index].pAreaEdict ).can_cap;
|
||||||
|
|
||||||
|
// strings
|
||||||
|
case CA_target:
|
||||||
|
if ( len ){
|
||||||
|
MF_SetAmxString(amx,params[3],STRING(mObjects.obj[index].pAreaEdict->v.target),len);
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
case CA_sprite:
|
||||||
|
if ( len ){
|
||||||
|
MF_SetAmxString(amx,params[3],GET_CA_PD(mObjects.obj[index].pAreaEdict).hud_sprite,len);
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static cell AMX_NATIVE_CALL area_set_data(AMX *amx, cell *params){ // index, key, ivalue , szvalue
|
||||||
|
int index = params[1];
|
||||||
|
if ( index < 0 || index > mObjects.count ){
|
||||||
|
MF_LogError(amx, AMX_ERR_NATIVE, "Index out of range (%d)", index);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
int iLen;
|
||||||
|
int ivalue = params[3];
|
||||||
|
char *szValue = MF_GetAmxString(amx, params[4], 0, &iLen);
|
||||||
|
|
||||||
|
CA_VALUE key = (CA_VALUE)params[2];
|
||||||
|
|
||||||
|
GET_CAPTURE_AREA(index)
|
||||||
|
|
||||||
|
switch ( key ){
|
||||||
|
case CA_allies_numcap :
|
||||||
|
GET_CA_PD( mObjects.obj[index].pAreaEdict ).allies_numcap = ivalue;
|
||||||
|
return 1;
|
||||||
|
case CA_axis_numcap :
|
||||||
|
GET_CA_PD( mObjects.obj[index].pAreaEdict ).axis_numcap = ivalue;
|
||||||
|
return 1;
|
||||||
|
case CA_timetocap :
|
||||||
|
GET_CA_PD( mObjects.obj[index].pAreaEdict ).time_to_cap = ivalue;
|
||||||
|
return 1;
|
||||||
|
case CA_can_cap :
|
||||||
|
GET_CA_PD( mObjects.obj[index].pAreaEdict ).can_cap = ivalue;
|
||||||
|
return 1;
|
||||||
|
// strings
|
||||||
|
case CA_target:
|
||||||
|
mObjects.obj[index].pAreaEdict->v.target = MAKE_STRING(szValue);
|
||||||
|
return 1;
|
||||||
|
case CA_sprite:
|
||||||
|
strcpy(GET_CA_PD( mObjects.obj[index].pAreaEdict ).hud_sprite,szValue);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
AMX_NATIVE_INFO pd_Natives[] = {
|
AMX_NATIVE_INFO pd_Natives[] = {
|
||||||
|
|
||||||
{ "dod_set_user_class", set_user_class },
|
{ "dod_set_user_class", set_user_class },
|
||||||
{ "dod_set_user_team", set_user_team },
|
{ "dod_set_user_team", set_user_team },
|
||||||
{ "dod_get_next_class", get_user_nextclass },
|
{ "dod_get_next_class", get_user_nextclass },
|
||||||
@ -475,16 +734,21 @@ AMX_NATIVE_INFO pd_Natives[] = {
|
|||||||
{ "dod_set_pl_deaths", set_user_deaths },
|
{ "dod_set_pl_deaths", set_user_deaths },
|
||||||
{ "dod_set_user_score", set_user_score },
|
{ "dod_set_user_score", set_user_score },
|
||||||
{ "dod_set_pl_teamname", set_user_teamname },
|
{ "dod_set_pl_teamname", set_user_teamname },
|
||||||
{ "dod_get_pl_teamname", get_user_teamname },
|
{ "dod_get_pl_teamname", get_user_teamname },
|
||||||
{ "dod_is_deployed", is_weapon_deployed },
|
{ "dod_is_deployed", is_weapon_deployed },
|
||||||
|
|
||||||
{ "dod_get_user_ammo", get_user_ammo },
|
{ "dod_get_user_ammo", get_user_ammo },
|
||||||
{ "dod_set_user_ammo", set_user_ammo },
|
{ "dod_set_user_ammo", set_user_ammo },
|
||||||
|
|
||||||
{ "dod_get_user_kills", get_user_frags },
|
{ "dod_get_user_kills", get_user_frags },
|
||||||
{ "dod_set_user_kills", set_user_frags },
|
{ "dod_set_user_kills", set_user_frags },
|
||||||
|
|
||||||
{ "dod_test_pd", test_pd },
|
{ "objective_set_data", objective_set_data },
|
||||||
|
{ "objective_get_data", objective_get_data },
|
||||||
|
{ "objectives_get_num", objectives_get_num },
|
||||||
|
{ "objectives_reinit", objectives_reinit },
|
||||||
|
{ "area_set_data", area_set_data },
|
||||||
|
{ "area_get_data", area_get_data },
|
||||||
///*******************
|
///*******************
|
||||||
{ NULL, NULL }
|
{ NULL, NULL }
|
||||||
};
|
};
|
@ -45,3 +45,4 @@ edict_t *FindEntityByClassname(edict_t *pentStart, const char *szName)
|
|||||||
{
|
{
|
||||||
return FindEntityByString(pentStart, "classname", szName);
|
return FindEntityByString(pentStart, "classname", szName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -42,21 +42,30 @@ extern AMX_NATIVE_INFO base_Natives[];
|
|||||||
extern AMX_NATIVE_INFO pd_Natives[];
|
extern AMX_NATIVE_INFO pd_Natives[];
|
||||||
|
|
||||||
extern int mState;
|
extern int mState;
|
||||||
|
extern int mDest;
|
||||||
extern int mPlayerIndex;
|
extern int mPlayerIndex;
|
||||||
|
|
||||||
void Client_CurWeapon(void*);
|
void Client_CurWeapon(void*);
|
||||||
|
void Client_InitObj(void*);
|
||||||
|
void Client_SetObj(void*);
|
||||||
|
|
||||||
typedef void (*funEventCall)(void*);
|
typedef void (*funEventCall)(void*);
|
||||||
|
|
||||||
extern int gmsgScoreShort;
|
extern int gmsgScoreShort;
|
||||||
extern int gmsgPTeam;
|
extern int gmsgPTeam;
|
||||||
|
extern int gmsgInitObj;
|
||||||
|
extern int gmsgSetObj;
|
||||||
|
|
||||||
extern int iFGrenade;
|
extern int iFGrenade;
|
||||||
|
extern int iFInitCP;
|
||||||
|
|
||||||
extern CPlayer players[33];
|
extern CPlayer players[33];
|
||||||
extern CPlayer* mPlayer;
|
extern CPlayer* mPlayer;
|
||||||
|
|
||||||
|
extern CObjective mObjects;
|
||||||
|
|
||||||
edict_t *FindEntityByClassname(edict_t *pentStart, const char *szName);
|
edict_t *FindEntityByClassname(edict_t *pentStart, const char *szName);
|
||||||
|
edict_t *FindEntityByString(edict_t *pentStart, const char *szKeyword, const char *szValue);
|
||||||
|
|
||||||
#define CHECK_ENTITY(x) \
|
#define CHECK_ENTITY(x) \
|
||||||
if (x < 0 || x > gpGlobals->maxEntities) { \
|
if (x < 0 || x > gpGlobals->maxEntities) { \
|
||||||
@ -101,6 +110,20 @@ edict_t *FindEntityByClassname(edict_t *pentStart, const char *szName);
|
|||||||
#define GETEDICT(n) \
|
#define GETEDICT(n) \
|
||||||
((n >= 1 && n <= gpGlobals->maxClients) ? MF_GetPlayerEdict(n) : INDEXENT(n))
|
((n >= 1 && n <= gpGlobals->maxClients) ? MF_GetPlayerEdict(n) : INDEXENT(n))
|
||||||
|
|
||||||
|
|
||||||
|
#define GET_CAPTURE_AREA(x) \
|
||||||
|
if ( mObjects.obj[x].areaflags == 0 ){\
|
||||||
|
if ( (mObjects.obj[x].pAreaEdict = FindEntityByString(0,"target",STRING(mObjects.obj[x].pEdict->v.targetname)))\
|
||||||
|
&& (strcmp( STRING(mObjects.obj[x].pAreaEdict->v.classname),"dod_capture_area" )==0) ){\
|
||||||
|
mObjects.obj[x].areaflags = 2;\
|
||||||
|
}\
|
||||||
|
else{\
|
||||||
|
mObjects.obj[x].areaflags = 1;\
|
||||||
|
}\
|
||||||
|
}\
|
||||||
|
if ( mObjects.obj[x].areaflags == 1 )\
|
||||||
|
return 0;
|
||||||
|
|
||||||
#endif // DODFUN_H
|
#endif // DODFUN_H
|
||||||
|
|
||||||
|
|
||||||
|
@ -39,15 +39,20 @@ void (*endfunction)(void*);
|
|||||||
CPlayer* mPlayer;
|
CPlayer* mPlayer;
|
||||||
CPlayer players[33];
|
CPlayer players[33];
|
||||||
|
|
||||||
|
CObjective mObjects;
|
||||||
|
|
||||||
int mState;
|
int mState;
|
||||||
|
int mDest;
|
||||||
int mPlayerIndex;
|
int mPlayerIndex;
|
||||||
|
|
||||||
int iFGrenade;
|
int iFGrenade;
|
||||||
|
int iFInitCP;
|
||||||
|
|
||||||
int gmsgCurWeapon;
|
int gmsgCurWeapon;
|
||||||
int gmsgScoreShort;
|
int gmsgScoreShort;
|
||||||
int gmsgPTeam;
|
int gmsgPTeam;
|
||||||
|
int gmsgInitObj;
|
||||||
|
int gmsgSetObj;
|
||||||
|
|
||||||
struct sUserMsg {
|
struct sUserMsg {
|
||||||
const char* name;
|
const char* name;
|
||||||
@ -55,13 +60,15 @@ struct sUserMsg {
|
|||||||
funEventCall func;
|
funEventCall func;
|
||||||
bool endmsg;
|
bool endmsg;
|
||||||
} g_user_msg[] = {
|
} g_user_msg[] = {
|
||||||
|
{ "InitObj",&gmsgInitObj,Client_InitObj,false},
|
||||||
{ "CurWeapon",&gmsgCurWeapon,Client_CurWeapon,false },
|
{ "CurWeapon",&gmsgCurWeapon,Client_CurWeapon,false },
|
||||||
{ "ScoreShort",&gmsgScoreShort,NULL,false },
|
{ "ScoreShort",&gmsgScoreShort,NULL,false },
|
||||||
{ "PTeam",&gmsgPTeam,NULL,false },
|
{ "PTeam",&gmsgPTeam,NULL,false },
|
||||||
|
{ "SetObj",&gmsgSetObj,Client_SetObj,false },
|
||||||
|
|
||||||
{ 0,0,0,false }
|
{ 0,0,0,false }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
int RegUserMsg_Post(const char *pszName, int iSize){
|
int RegUserMsg_Post(const char *pszName, int iSize){
|
||||||
for (int i = 0; g_user_msg[ i ].name; ++i ){
|
for (int i = 0; g_user_msg[ i ].name; ++i ){
|
||||||
if ( !*g_user_msg[i].id && strcmp( g_user_msg[ i ].name , pszName ) == 0 ){
|
if ( !*g_user_msg[i].id && strcmp( g_user_msg[ i ].name , pszName ) == 0 ){
|
||||||
@ -148,6 +155,7 @@ void MessageBegin_Post(int msg_dest, int msg_type, const float *pOrigin, edict_t
|
|||||||
mPlayer = NULL;
|
mPlayer = NULL;
|
||||||
}
|
}
|
||||||
mState = 0;
|
mState = 0;
|
||||||
|
mDest = msg_dest;
|
||||||
if ( msg_type < 0 || msg_type >= MAX_REG_MSGS )
|
if ( msg_type < 0 || msg_type >= MAX_REG_MSGS )
|
||||||
msg_type = 0;
|
msg_type = 0;
|
||||||
function=modMsgs[msg_type];
|
function=modMsgs[msg_type];
|
||||||
@ -230,7 +238,7 @@ void SetModel_Post(edict_t *e, const char *m){
|
|||||||
e->v.dmgtime += pPlayer->nadeFuse - 5.0;
|
e->v.dmgtime += pPlayer->nadeFuse - 5.0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else{ // catched
|
else{ // cought
|
||||||
bool ownNade = ( (pPlayer->pEdict->v.team == 1 && pPlayer->current == 16) || (pPlayer->pEdict->v.team == 2 && pPlayer->current == 15) ) ? true:false;
|
bool ownNade = ( (pPlayer->pEdict->v.team == 1 && pPlayer->current == 16) || (pPlayer->pEdict->v.team == 2 && pPlayer->current == 15) ) ? true:false;
|
||||||
if ( ownNade ){
|
if ( ownNade ){
|
||||||
float fExp = e->v.dmgtime - gpGlobals->time;
|
float fExp = e->v.dmgtime - gpGlobals->time;
|
||||||
@ -250,4 +258,5 @@ void OnAmxxAttach() {
|
|||||||
|
|
||||||
void OnPluginsLoaded(){
|
void OnPluginsLoaded(){
|
||||||
iFGrenade = MF_RegisterForward("grenade_throw",ET_IGNORE,FP_CELL,FP_CELL,FP_CELL,FP_DONE);
|
iFGrenade = MF_RegisterForward("grenade_throw",ET_IGNORE,FP_CELL,FP_CELL,FP_CELL,FP_DONE);
|
||||||
|
iFInitCP = MF_RegisterForward("controlpoints_init",ET_IGNORE,FP_DONE);
|
||||||
}
|
}
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
// Module info
|
// Module info
|
||||||
#define MODULE_NAME "DoD Fun"
|
#define MODULE_NAME "DoD Fun"
|
||||||
#define MODULE_VERSION "1.01"
|
#define MODULE_VERSION "1.02"
|
||||||
#define MODULE_AUTHOR "AMX Mod X Dev Team"
|
#define MODULE_AUTHOR "AMX Mod X Dev Team"
|
||||||
#define MODULE_URL "http://www.amxmodx.org"
|
#define MODULE_URL "http://www.amxmodx.org"
|
||||||
#define MODULE_LOGTAG "DODFUN"
|
#define MODULE_LOGTAG "DODFUN"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* dodfun
|
* DoDFun
|
||||||
* Copyright (c) 2004 Lukasz Wlasinski
|
* Copyright (c) 2004 £ukasz W³asiñski
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
@ -28,6 +28,7 @@
|
|||||||
* version.
|
* version.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "amxxmodule.h"
|
#include "amxxmodule.h"
|
||||||
#include "dodfun.h"
|
#include "dodfun.h"
|
||||||
|
|
||||||
@ -46,4 +47,65 @@ void Client_CurWeapon(void* mValue){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Client_InitObj(void* mValue){
|
||||||
|
static int num;
|
||||||
|
|
||||||
|
if ( mDest != MSG_ALL )
|
||||||
|
return;
|
||||||
|
|
||||||
|
switch (mState++){
|
||||||
|
case 0:
|
||||||
|
num = 0;
|
||||||
|
mObjects.count = *(int*)mValue;
|
||||||
|
if ( mObjects.count == 0 )
|
||||||
|
mObjects.Clear();
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
mObjects.obj[num].pEdict = INDEXENT(*(int*)mValue);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
mObjects.obj[num].index = *(int*)mValue;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
mObjects.obj[num].default_owner = *(int*)mValue;
|
||||||
|
mObjects.obj[num].owner = mObjects.obj[num].default_owner;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
mObjects.obj[num].visible = *(int*)mValue;
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
mObjects.obj[num].icon_neutral = *(int*)mValue;
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
mObjects.obj[num].icon_allies = *(int*)mValue;
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
mObjects.obj[num].icon_axis = *(int*)mValue;
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
mObjects.obj[num].origin_x = *(float*)mValue;
|
||||||
|
break;
|
||||||
|
case 9: // 8,9 coord
|
||||||
|
mObjects.obj[num].origin_y = *(float*)mValue;
|
||||||
|
mState = 1;
|
||||||
|
num++;
|
||||||
|
if ( num == mObjects.count ){
|
||||||
|
mObjects.Sort();
|
||||||
|
MF_ExecuteForward( iFInitCP );
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Client_SetObj(void* mValue){
|
||||||
|
static int id;
|
||||||
|
switch (mState++){
|
||||||
|
case 0:
|
||||||
|
id = *(int*)mValue;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
mObjects.obj[id].owner = *(int*)mValue;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,6 @@
|
|||||||
/* DoDFun functions
|
/* DoDFun functions
|
||||||
*
|
*
|
||||||
* (c) 2004, SidLuke
|
* (c) 2004-2005, SidLuke
|
||||||
* This file is provided as is (no warranties).
|
* This file is provided as is (no warranties).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -65,4 +65,71 @@ native dod_set_user_ammo(index,wid,value);
|
|||||||
/*Gets the ammo of the specified weapon entity id */
|
/*Gets the ammo of the specified weapon entity id */
|
||||||
native dod_get_user_ammo(index,wid);
|
native dod_get_user_ammo(index,wid);
|
||||||
|
|
||||||
|
/* called after first InitObj */
|
||||||
|
forward controlpoints_init();
|
||||||
|
|
||||||
|
enum CP_VALUE {
|
||||||
|
CP_edict = 1, // read only
|
||||||
|
CP_area, // read only
|
||||||
|
CP_index, // read only
|
||||||
|
CP_owner,
|
||||||
|
CP_default_owner,
|
||||||
|
CP_visible, // reinit after change
|
||||||
|
CP_icon_neutral, // reinit after change
|
||||||
|
CP_icon_allies, // reinit after change
|
||||||
|
CP_icon_axis, // reinit after change
|
||||||
|
CP_origin_x, // reinit after change
|
||||||
|
CP_origin_y, // reinit after change
|
||||||
|
|
||||||
|
CP_can_touch,
|
||||||
|
CP_pointvalue,
|
||||||
|
|
||||||
|
CP_points_for_cap,
|
||||||
|
CP_team_points,
|
||||||
|
|
||||||
|
CP_model_body_neutral,
|
||||||
|
CP_model_body_allies,
|
||||||
|
CP_model_body_axis,
|
||||||
|
|
||||||
|
// strings
|
||||||
|
CP_name,
|
||||||
|
CP_reset_capsound,
|
||||||
|
CP_allies_capsound,
|
||||||
|
CP_axis_capsound,
|
||||||
|
CP_targetname,
|
||||||
|
|
||||||
|
CP_model_neutral,
|
||||||
|
CP_model_allies,
|
||||||
|
CP_model_axis,
|
||||||
|
};
|
||||||
|
|
||||||
|
/* returns number of objectives */
|
||||||
|
native objectives_get_num();
|
||||||
|
|
||||||
|
/* use this function to update client(s) hud. You need to do this sometimes. Check CP_VALUE comments.
|
||||||
|
if player is 0 , all clients will get this message */
|
||||||
|
native objectives_reinit( player=0 );
|
||||||
|
|
||||||
|
/* use this function to get info about specified control point */
|
||||||
|
native objective_get_data( index, CP_VALUE:key, szValue[]="", len=0 );
|
||||||
|
|
||||||
|
/* use this function to change control point's data */
|
||||||
|
native objective_set_data( index, CP_VALUE:key , iValue=-1, szValue[]="" );
|
||||||
|
|
||||||
|
enum CA_VALUE {
|
||||||
|
CA_edict = 1,
|
||||||
|
CA_allies_numcap,
|
||||||
|
CA_axis_numcap,
|
||||||
|
CA_timetocap,
|
||||||
|
CA_can_cap,
|
||||||
|
|
||||||
|
// strings
|
||||||
|
CA_target,
|
||||||
|
CA_sprite,
|
||||||
|
};
|
||||||
|
|
||||||
|
/* use this function to get info about specified control point's area */
|
||||||
|
native area_get_data( index, CP_VALUE:key, szValue[]="", len=0 );
|
||||||
|
|
||||||
|
/* use this function to change control point's area data */
|
||||||
|
native area_set_data( index, CP_VALUE:key , iValue=-1, szValue[]="" );
|
||||||
|
Loading…
Reference in New Issue
Block a user