Raised This Month: $51 Target: $400
 12% 

How To Reset User Model When Be Zombie


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
DarkLegacy
Junior Member
Join Date: Feb 2021
Old 07-07-2021 , 10:57   How To Reset User Model When Be Zombie
Reply With Quote #1

So i tried to edit player models by common bullet but the models didnt change to zombie when i use cs_reset_user_models

Code:
/*

Player Model
=================
by commonbullet
based on scriptyboy's script & idea

written in AMXX-Studio

description:
------------
- custom models

forum topic:
------------
-

requirements:
-------------
- requires "cstrike" module

usage:
------
look at models.ini
*/

#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <engine>
#include <zombieplague>

// ---- [debug settings]

#define DEBUG_MODE 0

#define DEBUG_LOGFILE "playermodel.log"
#define DEBUG_MSG_BEGIN "========= PLAYERMODEL DEBUG ========="
#define DEBUG_MSG_END "====================================="
#define DEBUG_MSG_ERROR "[PLAYERMODEL ERROR] "
#define DEBUG_MSG_LOG "[PLAYERMODEL LOG] "

// ---- [end]


// ---- [console messages]

#define CONSOLE_MSG_HLIN "----------------------------------------"
#define CONSOLE_MSG_HEAD "[PLAYERMODEL - Models.ini]"
//#define CONSOLE_MSG_FOOT "[PLAYERMODEL - End of Models.ini]"
#define CONSOLE_MSG_MODELS_LIST "[MODELS]"

#define CONSOLE_MSG_DEL_INVALID "Invalid number. Type amx_playermodel_ini to get models index."
#define CONSOLE_MSG_DEL_DELETED "Line %s has been deleted."
#define CONSOLE_MSG_DEL_UPDATED "Current game model settings have been updated"
#define CONSOLE_MSG_SET_RESTART "You need to restart map to apply changes."
#define CONSOLE_MSG_SET_UPDATE "Models.ini has been updated."
#define CONSOLE_MSG_SET_ADD "Line added to Models.ini."
#define CONSOLE_MSG_SET_NORESTART "Model(s) have been set with precached files - no need to restart."
#define CONSOLE_MSG_SET_MODEL_INVALID "Invalid Model: %s. ^nType 'amx_playermodel_models to get a list of valid models"
#define CONSOLE_MSG_SET_ID_INVALID "Invalid ID"
#define CONSOLE_MSG_MODELSLIST_FOOT "(*) - Models that have been precached in this session."
#define CONSOLE_MSG_ACCESS_INVALID "You don't have admin access change/view models.."
#define CONSOLE_MSG_INI_CREATE "** Models.ini has just been created."
// ---- [end]


// ---- [constants indexes]

#define LN_TYPE_BLANK 0
#define LN_TYPE_VALID 1

#define AUTH_TYPE_BOTNAME 0
#define AUTH_TYPE_STEAMID 1
#define AUTH_TYPE_IP 2

// ---- [end]


// ---- [general settings]

#define MODELSINI_SCRATCH_LIMIT 9 //blank lines may be overwritten in models.ini after this line number

//max models in models.ini..
#define MAX_MODELS 64
#define MAX_PLAYERS 32

// max cs and cz models,
// shouldn't be changed unless there's a valve update...
#define MAX_CZ_MODELS 5
#define MAX_CS_MODELS 4

#define TAG_BOTDEFAULT "*BOTDEFAULT"
#define TAG_DEFAULT "*DEFAULT"
#define TAG_FORCEPRECACHE_CHAR "*"
#define TAG_COMMANDSET_BY_STEAMID "&"
#define TAG_COMMANDSET_BY_IP "%"
#define TAG_COMMANDSET_NULL "_"
#define TAG_REPLACE "*REPLACE"

#define STATUS_MODEL_NOTSET 0
#define STATUS_MODEL_SETBYID 1
#define STATUS_MODEL_BOTDEFAULT 2
#define STATUS_MODEL_DEFAULT 4
#define STATUS_MODEL_REPLACEMENT 8
#define STATUS_MODEL_NOMODEL 16
#define STATUS_MODEL_RESET 32

#define SETMODEL_RESET -4
#define SETMODEL_REPLACE -3
#define SETMODEL_DEFAULT -2
#define SETMODEL_BOTDEFAULT -1

#define NULLINDEX 8080 //-1 is being used...
#define REPLACEMENT_SIGN "$"


// ---- [end]


// Globals
new g_PlayerId[MAX_MODELS][25] // list of players ids
new g_PrecachedList[MAX_MODELS][32]
new g_PrecachedCount
new g_ModelInfo[2][MAX_MODELS] // info about the models for each team
new g_ModelsCount //models count

new g_ModelStatus[MAX_PLAYERS] // array to check if a player model has been set, so it won't be set
// unless it's necessary
new g_BotsModel[2] = {-1,-1}// bots' unique model
new g_DefaultModel[2] = {-1, -1} // human's default model

#if DEBUG_MODE == 1
new logmsg[192]
#endif

public plugin_init() {

register_plugin("Player Model", "2.13c", "commonbullet")

register_event("ResetHUD", "set_players_models", "be")

register_logevent ("auto_balance_triggered", 4, "3=auto")

register_concmd ("amx_playermodel_ini","list_ini",ADMIN_KICK,"list models.ini")
register_concmd ("amx_playermodel_del","del_line",ADMIN_KICK,"<line>")
register_concmd ("amx_playermodel_models","list_models",ADMIN_KICK,"list valid models")
register_concmd ("amx_playermodel_set","set_line",ADMIN_KICK,"<*modelname> | <steam|id|ip|botname> <model1> <model2>")
register_cvar ("amx_playermodel_round_checkid", "0")

}


// ---- [Models.ini handlers]

public list_ini (id,level,cid) {

if (!cmd_access(id, level, cid, 0)) {
console_print(id, CONSOLE_MSG_ACCESS_INVALID)
return PLUGIN_HANDLED
}

new path[66]
new validlines[MAX_MODELS]
new vlinesnum
new linestr[100]
new len = 0

get_inipath(path,65)
get_ini_lines(validlines,vlinesnum,LN_TYPE_VALID)

console_print(id, "^n%s^n%s^n%s",CONSOLE_MSG_HLIN,CONSOLE_MSG_HEAD,CONSOLE_MSG_HLIN)

for (new i = 0;i<vlinesnum;i++){
read_file (path,validlines,linestr,99,len)
console_print(id, "[%d]^t^t%s",i+1,linestr)
}
console_print(id, CONSOLE_MSG_HLIN)

return PLUGIN_HANDLED

}



public del_line (id,level,cid){

if (!cmd_access(id, level, cid, 0)){
console_print(id, CONSOLE_MSG_ACCESS_INVALID)
return PLUGIN_HANDLED
}

new numst[2]
new num
new bool:isvalidnum
new validlines[MAX_MODELS]
new vlinesnum
new msg[128]
new bool:updated

read_argv (1,numst,2)
num = str_to_num(numst)

if (strlen(numst)==0 || !num){
list_ini(id,level,cid)
console_print(id, CONSOLE_MSG_DEL_INVALID)
return PLUGIN_HANDLED
}

else {

get_ini_lines(validlines,vlinesnum,LN_TYPE_VALID)
isvalidnum = (num <= vlinesnum) ? true : false
if (isvalidnum) {

new authid[20]
new linestr[30]
new path[66]
new len

get_inipath(path,65)
read_file (path,validlines[num-1],linestr,29,len)

parse (linestr,authid,19)
write_file (path, "", validlines[num-1])

format (msg,127,CONSOLE_MSG_DEL_DELETED,num)
console_print(id, "!! %s", authid)
if(equali(authid,TAG_BOTDEFAULT)) {
new bots[32]
new botnum

get_players (bots,botnum,"d")
g_BotsModel[0] = -1
g_BotsModel[1] = -1
updated = true

for (new i=0;i<botnum;i++) {
g_ModelStatus[bots] |= STATUS_MODEL_RESET
set_players_models(bots)
}
}

else if(equali(authid, TAG_DEFAULT)) {
new players[32]
new playersnum

get_players(players, playersnum, "c")
g_DefaultModel[0] = -1
g_DefaultModel[1] = -1
updated = true
for(new i = 0; i < playersnum; i++) {
g_ModelStatus[players] |= STATUS_MODEL_RESET
set_players_models(players)
}
}

else if(equal(authid, TAG_REPLACE)) {
new players[32]
new playersnum
new modelname[32]
new modelfind[32]
new modelreplace[32]

parse(linestr, authid, 1, modelfind, 31, modelreplace, 31)

for(new ind = 0; ind < MAX_MODELS; ind++) {
if(!equal(g_PlayerId[ind], REPLACEMENT_SIGN))
continue
if(equal(g_ModelInfo[0][ind], modelfind) && equal(g_ModelInfo[1][ind], modelreplace)) {
for (new i=ind;i<(g_ModelsCount-1);i++){
g_PlayerId = g_PlayerId[i+1]
g_ModelInfo = g_ModelInfo[i+1]
g_ModelsCount--
break
}
}
}

get_players(players, playersnum)
for(new i = 0; i < playersnum; i++) {
cs_get_user_model(players, modelname, 31)
if(equal(modelname, modelreplace)) {
g_ModelStatus[players] |= STATUS_MODEL_RESET
set_players_models(players)
}
}
updated = true
}

else if (!(strfind(authid,TAG_FORCEPRECACHE_CHAR) > -1) && strlen(authid)>1) {
new ind = find_registered_id(authid)
if (ind > -1){

new players[32]
new playersnum
new authtype
new checkid

for (new i=ind;i<(g_ModelsCount-1);i++){
g_PlayerId = g_PlayerId[i+1]
g_ModelInfo = g_ModelInfo[i+1]
}

g_ModelsCount--
get_players (players,playersnum)

for (new i=0;i<playersnum;i++) {
check_authtype(players,authid,authtype,checkid)
if (checkid) {
g_ModelStatus[players] |= STATUS_MODEL_RESET
set_players_models(players)
break
}
}
if (checkid)
updated = true
}

}
list_ini(id,level,cid)
console_print(id, CONSOLE_MSG_DEL_DELETED,num)
if (updated)
console_print(id, CONSOLE_MSG_DEL_UPDATED)

}
else {
list_ini(id,level,cid)
console_print(id, CONSOLE_MSG_DEL_INVALID)
return PLUGIN_HANDLED
}
}



return PLUGIN_HANDLED

}

public list_models(id,level,cid){

if (!cmd_access(id, level, cid, 0)){
console_print(id, CONSOLE_MSG_ACCESS_INVALID)
return PLUGIN_HANDLED
}

new models [32][16]
new teamid
new len
new tabcount
new indexstr[8]
new msghead[3][] = {
"CT Default Models^n",
"T Default Models^n",
"Available Custom Models^n"
}
new msg[256]

for (new i=0;i<3;i++){

switch (i){
case 0:{
teamid = 1
get_default_models (models,len,teamid)
}
case 1:{
teamid = 0
get_default_models (models,len,teamid)
}
case 2:{
get_custom_models (models,len,31)
}
}

format(msg,96,"%s%s^n",msghead,CONSOLE_MSG_HLIN)

for (new q=0;q<len;q++){

strcat(msg,models[q],255)

if (i<2){
format (indexstr,7," (#%d)",q+1)
strcat (msg,indexstr,255)
}
else if (find_precached_ind(models[q])>-1){
format(indexstr,7," (*)")
strcat (msg,indexstr,255)
}


if (tabcount < 3)
strcat(msg,"^t^t^t^t",255)
else if ((q+1)<len) {

strcat(msg,"^n",255)

tabcount = 0;
}

tabcount ++

}
console_print(id, "%s^n",msg)
tabcount = 0
}
console_print(id, CONSOLE_MSG_MODELSLIST_FOOT)

return PLUGIN_HANDLED

}

public set_line (id,level,cid){

if (!cmd_access(id, level, cid, 0)){
console_print(id, CONSOLE_MSG_ACCESS_INVALID)
return PLUGIN_HANDLED
}

new arg1[32]
new arg2[32]
new arg3[32]
new forceprecache

read_argv (1,arg1,31)
read_argv (2,arg2,31)
read_argv (3,arg3,31)

if (strlen(arg1)==0){
console_print(id, CONSOLE_MSG_SET_ID_INVALID)
return PLUGIN_HANDLED
}

if ((strfind (arg1,TAG_FORCEPRECACHE_CHAR)==0) && (strlen(arg2)==0) && (strlen(arg3)==0) && (!equali(arg1,TAG_BOTDEFAULT))){

substr (arg1,arg3,31,1)

if (is_valid_model(arg3))
forceprecache = 1

else {
console_print(id, CONSOLE_MSG_SET_MODEL_INVALID,arg2)
return PLUGIN_HANDLED
}

}

else {
if (strfind (arg1,TAG_COMMANDSET_BY_STEAMID) ==0){

new temp[32]
new pid

substr (arg1,temp,31,1)

pid = get_user_index (temp)

if (pid && !is_user_bot(pid))
get_user_authid(pid,arg1,31)

else {
console_print(id, CONSOLE_MSG_SET_ID_INVALID)
return PLUGIN_HANDLED
}

}

if (strfind (arg1,TAG_COMMANDSET_BY_IP) ==0){

new temp[32]
new pid

substr (arg1,temp,31,1)
pid = get_user_index (temp)

if (pid && !is_user_bot(pid))
get_user_ip (pid,arg1,31)

else{
console_print(id, CONSOLE_MSG_SET_ID_INVALID)
return PLUGIN_HANDLED
}

}




if (!is_valid_model(arg2)){
console_print(id, CONSOLE_MSG_SET_MODEL_INVALID,arg2)
return PLUGIN_HANDLED
}

if ((strlen(arg3)>0) && !is_valid_model(arg3)){
console_print(id, CONSOLE_MSG_SET_MODEL_INVALID,arg3)
return PLUGIN_HANDLED
}
}

new line
new blanklines[MAX_MODELS]
new blanknum
new linestr[100]
new path[66]
new msg[128]
new iniline
new searchstr[21]

get_inipath(path,65)
line = -1
format (searchstr,20,"^"%s^"",arg1)

iniline = find_line_by_id (searchstr)

if (iniline>-1)
line = iniline
else {
get_ini_lines (blanklines,blanknum,LN_TYPE_BLANK)
if (blanknum && (blanklines[blanknum-1]>=MODELSINI_SCRATCH_LIMIT))
line = blanklines[blanknum-1]
}

if (strlen(arg3)>0 && !forceprecache)
format(linestr,99,"^"%s^" ^"%s^" ^"%s^"",arg1,arg2,arg3)

else if (forceprecache)
format(linestr,99,"^"%s^"",arg1)

else
format(linestr,99,"^"%s^" ^"%s^"",arg1,arg2)


new Tind
new CTind
new mayupdate // may update without restart

if (strfind(arg2,"#")==0){
new error
get_models_by_number(arg2,arg2,arg3,error)
}

Tind = (equal(arg2, "_")) ? NULLINDEX : find_precached_ind(arg2)
CTind = (equal(arg2, "_")) ? NULLINDEX : (strlen(arg3)>0) ? find_precached_ind(arg3) : Tind

mayupdate = (!forceprecache)? ((Tind>-1) && (CTind>-1)) : ((CTind>-1))

if (mayupdate) {

if (equali(arg1,TAG_DEFAULT)) {
new players[32]
new playernum
get_players (players,playernum,"c")
g_DefaultModel[0] = Tind
g_DefaultModel[1] = CTind

for (new i=0; i < playernum; i++) {
g_ModelStatus[players] |= STATUS_MODEL_RESET
set_players_models(players)
}
}

if (equali(arg1,TAG_BOTDEFAULT)){

new bots[32]
new botnum

get_players (bots,botnum,"d")
g_BotsModel[0] = Tind
g_BotsModel[1] = CTind

for (new i=0;i<botnum;i++){

g_ModelStatus[bots] |= STATUS_MODEL_RESET
set_players_models(bots)
}
}

else if(equal(arg1, TAG_REPLACE)) {
new players[32]
new playersnum
new modelname[32]
get_players(players, playersnum)

new slot = find_empty_slot()
if(slot > -1) {
format(g_PlayerId[slot], 24, REPLACEMENT_SIGN)
g_ModelInfo[0][slot] = Tind
g_ModelInfo[1][slot] = CTind
for(new i = 0; i < playersnum; i++) {
cs_get_user_model(players, modelname, 31)
if(equali(modelname, arg2)) {
g_ModelStatus[players] |= STATUS_MODEL_RESET
set_players_models(players)
}
}
}
}

else if (!forceprecache){

new ind = find_registered_id(arg1)
new players[32]
new playersnum
new authtype
new checkid

if (ind > -1){

g_ModelInfo[0][ind] = Tind
g_ModelInfo[1][ind] = CTind
format(msg,47,CONSOLE_MSG_SET_UPDATE)
}

else {
copy (g_PlayerId[g_ModelsCount],24,arg1)
g_ModelInfo[0][g_ModelsCount] = Tind
g_ModelInfo[1][g_ModelsCount] = CTind
ind = g_ModelsCount
g_ModelsCount ++
format(msg,47,CONSOLE_MSG_SET_ADD)
}

get_players (players,playersnum)

for (new i=0;i<playersnum;i++){

check_authtype(players,g_PlayerId[ind],authtype,checkid)

if (checkid){
g_ModelStatus[players] |= STATUS_MODEL_RESET
set_players_models(players)
break
}
}
}

strcat (msg,"^n",127)
strcat (msg,CONSOLE_MSG_SET_NORESTART,127)


}

else {
format(msg,47,CONSOLE_MSG_SET_ADD,127)
strcat (msg,"^n",127)
strcat (msg,CONSOLE_MSG_SET_RESTART,127)
}

write_file (path,linestr,line)

list_ini(id,level,cid)
console_print(id, msg)

return PLUGIN_HANDLED

}

find_empty_slot() {
for(new i = 0; i < MAX_MODELS; i++) {
if(!strlen(g_PlayerId))
return i
}
return -1
}

// ---- [End of Models.ini handlers]


// ---- [Shared functions]

get_inipath(path[],len){

get_configsdir( path , len )
format(path , len , "%s/models.ini",path)

if (!file_exists(path)){
write_file (path,"",-1)
server_print (CONSOLE_MSG_INI_CREATE)
}
}

get_ini_lines(validlines[],&vlinesnum,linetype){
vlinesnum = 0;
new szFile[66]

get_inipath (szFile,65)

new szLine[63] , line = 0, len = 0

while(read_file(szFile, line ++ , szLine , 62 , len) && vlinesnum<MAX_MODELS){
switch (linetype){
case LN_TYPE_VALID: {

if(szLine[0] == ';' || !len)
continue
else {
validlines[vlinesnum] = line -1
vlinesnum ++
}
}
case LN_TYPE_BLANK: {
if (!len){
validlines[vlinesnum] = line - 1
vlinesnum ++
}
}
}

}
}

get_default_models(models[][],&len,teamid){

new defaultTmodels [5][] = {
"terror",
"leet",
"arctic",
"guerilla",
"militia"
}
new defaultCTmodels[5][] = {
"urban",
"gsg9",
"sas",
"gign",
"spetsnaz"
}

len = (is_running("czero")) ? 5 : 4

for (new i=0;i<len;i++){
if (teamid){
copy (models,15,defaultCTmodels)

}
else {
copy (models,15,defaultTmodels)
}
}

}

get_custom_models(custommodels[][],&len,maxlen){

new models[16]
new modelpath [65]
new fh = open_dir("models/player",models,31)

next_file (fh,models,15)
len = 0

while (next_file(fh,models,15)){
format (modelpath,64,"models/player/%s/%s%s",models,models,".mdl")
if (file_exists(modelpath) && (len < maxlen)){

copy(custommodels[len],15,models)
len ++
}

}
close_dir(fh)

}

is_valid_model(model[]){

new bool:isvalid
new lim = (is_running("czero")) ? 5 : 4

if ( (strfind(model,"#")==0) && (isdigit(model[1])) ){
new num = str_to_num (model[1])
if ((num>=1) && (num<=lim))
isvalid = true
}

else if(equal(model, "_"))
isvalid = true

else {
for (new j=0;j<3;j++){

new cdmodels[32][16]

if (j<2)
get_default_models (cdmodels,lim,j)

else
get_custom_models (cdmodels,lim,31)

for (new i=0;i<lim;i++){
if (equali(cdmodels,model)){
isvalid = true
break
}
}
if (isvalid)
break
}
}

return isvalid

}

get_models_by_number(numst[],Tmodel[],CTmodel[],&error=0){

new Default_T_Models [5][16]
new Default_CT_Models[5][16]
new dlen

get_default_models (Default_T_Models,dlen,0)
get_default_models (Default_CT_Models,dlen,1)

if (equal("#1",numst)){
copy (Tmodel,31,Default_T_Models[0])
copy (CTmodel,31,Default_CT_Models[0])

}

else if (equal("#2",numst)){
copy (Tmodel,31,Default_T_Models[1])
copy (CTmodel,31,Default_CT_Models[1])
}

else if (equal("#3",numst)){
copy (Tmodel,31,Default_T_Models[2])
copy (CTmodel,31,Default_CT_Models[2])
}

else if (equal("#4",numst)){
copy (Tmodel,31,Default_T_Models[3])
copy (CTmodel,31,Default_CT_Models[3])
}

else if (equal("#5",numst) && is_running("czero")){
copy (Tmodel,31,Default_T_Models[4])
copy (CTmodel,31,Default_CT_Models[4])
}

else error = 1
}

find_registered_id(idstr[]){
new index = -1
for (new i=0;i<g_ModelsCount;i++){

if (equali(idstr,g_PlayerId)){
index = i
break
}
}
return index
}

find_line_by_id(idstr[]){

new szFile[66]
new idline = -1
get_inipath (szFile,65)
new szLine[21] , line = 0, len = 0
new bool:linefound = false

while(read_file(szFile, line ++ , szLine , 20 , len)){

if ((strfind(szLine,idstr)==0)){

if (!linefound){
idline = line - 1
linefound = true
}
// clean models.ini duplicate ids
else
write_file(szFile,"",line)
}

}

return idline
}

find_precached_ind(model[]){
new ind = -1
for (new i=0;i<g_PrecachedCount;i++){
if (equali(model,g_PrecachedList)){
ind = i
break
}
}
return ind
}

check_authtype(id, checkauthid[], &authtype, &checkid=false, authid[50]=""){

authtype = -1

// bots don't have steamid, so they are indexed by name ...
if (is_user_bot(id)){
get_user_name(id,authid,49)
checkid = (equali(authid,checkauthid))
#if DEBUG_MODE == 1
authtype = AUTH_TYPE_BOTNAME
#endif
}

// ... while humans are supposed to have a steamid or a IP.
else if ( strfind(checkauthid,"STEAM")>-1 || strfind (checkauthid,"VALVE")>-1) {
get_user_authid(id,authid,49)
checkid = equali(authid,checkauthid)
#if DEBUG_MODE == 1
authtype = AUTH_TYPE_STEAMID
#endif
}

else {
get_user_ip (id,authid,49)
checkid = (strfind(authid,checkauthid)>-1)
#if DEBUG_MODE == 1
authtype = AUTH_TYPE_IP
#endif
}
return authtype
}

stock substr(const str[],dest[],len,lpos){

new pos,ind

for (pos=lpos;pos<strlen(str);pos++){
if (ind<len){
dest[ind] = str[pos]
ind ++
}
}

}

// ---- [End of shared funtions]



#if DEBUG_MODE == 1
public debugMsg(const msg[]){
server_print (msg)
write_file (DEBUG_LOGFILE,msg)
}
#endif


// ---- [Precache]

public plugin_precache() {

new Default_T_Models [5][16]
new Default_CT_Models[5][16]
new dlen

get_default_models (Default_T_Models,dlen,0)
get_default_models (Default_CT_Models,dlen,1)

for (new i=0;i<dlen;i++){
copy(g_PrecachedList[g_PrecachedCount],15,Default_T_Models)
g_PrecachedCount ++
}

for (new i=0;i<dlen;i++){
copy(g_PrecachedList[g_PrecachedCount],15,Default_CT_Models)
g_PrecachedCount ++
}

#if DEBUG_MODE == 1
format (logmsg,127,DEBUG_MSG_BEGIN)
debugMsg (logmsg)
#endif

new szFile[66]
get_inipath (szFile,65)

#if DEBUG_MODE == 1
format (logmsg,191,"%s%s%s",DEBUG_MSG_LOG,"AMXMODX CONFIG DIR: ",szFile)
debugMsg (logmsg)
#endif

new szLine[101]
new line
new len
new mayprecache_CT
new mayprecache_T
new forceprecache
new isnullmodel_CT
new isnullmodel_T
new isreplacement

while(read_file(szFile, line ++ , szLine , 100 , len) && (g_ModelsCount < MAX_MODELS) ) {

if(szLine[0] == ';' || !len) continue

new arg1[32]
new arg2[32]
new arg3[32]

mayprecache_CT = 1 //flags if a CT model needs to be precached
mayprecache_T = 1 //flags if a T model needs to be precached
forceprecache = 0
isnullmodel_CT = 0
isnullmodel_T = 0
isreplacement = 0

parse (szLine, arg1 , 24 , arg2 , 31, arg3 , 31)

if (strfind(arg2, "#")>-1) {

new error

mayprecache_CT = 0
mayprecache_T = 0

get_models_by_number (arg2,arg2,arg3,error)
if (error){
server_print ("[model error] Invalid Model Index: %s",arg2)
continue
}
}

else if ( (strfind(arg1,TAG_FORCEPRECACHE_CHAR)==0) && (strlen(arg1)>1) && (strlen(arg2)==0) && (strlen(arg3)==0)){

substr(arg1,arg3,31,1)
mayprecache_T = 0
if (find_precached_ind(arg3)>-1)
continue
}



else {
// model replacement
if (equali(arg1, TAG_REPLACE)) {
if(equali(arg2, arg3))
continue
isreplacement = 1
}

// if there's only one model they'll be the same for CTs and Ts
else if (!strlen(arg3)){
if(!strlen(arg2))
continue
copy (arg3,31,arg2)
mayprecache_T = 0
}
else {
if(equal(arg3, TAG_COMMANDSET_NULL)) {
isnullmodel_CT = 1
mayprecache_CT = 0
}
if(equal(arg2, TAG_COMMANDSET_NULL)) {
isnullmodel_T = 1
mayprecache_T = 0
}
}

// This will prevent unecessary caching.
// for default models
for (new ind = 0; ind < g_PrecachedCount; ind ++) {
if (mayprecache_CT && equali(arg3, g_PrecachedList[ind]))
mayprecache_CT = 0
if (mayprecache_T && equali(arg2, g_PrecachedList[ind]))
mayprecache_T = 0
if (!mayprecache_CT && !mayprecache_T)
break
}
}

// if it's a default model, it doesn't need to be cached
if (mayprecache_CT){

new modelpath [65]
format (modelpath,64,"models/player/%s/%s%s",arg3,arg3,".mdl")

if (file_exists(modelpath)) {
#if DEBUG_MODE == 1
format (logmsg,191,"%s%s%s",DEBUG_MSG_LOG," PRECACHING CT CUSTOM MODEL :",modelpath)
debugMsg (logmsg)
#endif

precache_model(modelpath)
copy (g_PrecachedList[g_PrecachedCount],31,arg3)
g_PrecachedCount ++
}

else {
server_print ("[model error] File Not Found: %s",modelpath)
#if DEBUG_MODE == 1
format (logmsg,191,"[model error] File Not Found: %s",modelpath)
debugMsg (logmsg)
#endif
continue
}
}

if (mayprecache_T && (!equali(arg2,arg3))){

new modelpath [65]
format (modelpath,64,"models/player/%s/%s%s",arg2,arg2,".mdl")

if (file_exists(modelpath)){

#if DEBUG_MODE == 1
format (logmsg,191,"%s%s%s",DEBUG_MSG_LOG," PRECACHING T CUSTOM MODEL :",modelpath)
debugMsg (logmsg)
#endif

precache_model(modelpath)
copy (g_PrecachedList[g_PrecachedCount],31,arg2)
g_PrecachedCount ++

}
else {
server_print ("[model error] File Not Found: %s",modelpath)
#if DEBUG_MODE == 1
format (logmsg,191,"[model error] File Not Found: %s",modelpath)
debugMsg (logmsg)
#endif
continue
}
}

// sets bots' unique models, if specified

new CTmodelind
new Tmodelind

CTmodelind = (isnullmodel_CT) ? NULLINDEX : find_precached_ind(arg3)
Tmodelind = (isnullmodel_T) ? NULLINDEX : find_precached_ind(arg2)

if ((CTmodelind>-1) && (Tmodelind>-1) && !forceprecache){

if (equali(TAG_BOTDEFAULT,arg1)){
g_BotsModel[0] = Tmodelind
g_BotsModel[1] = CTmodelind
}

if (equali(TAG_DEFAULT, arg1)){
g_DefaultModel[0] = Tmodelind
g_DefaultModel[1] = CTmodelind
}

else {
if(isreplacement)
format(g_PlayerId[g_ModelsCount], 24, REPLACEMENT_SIGN)
else
copy(g_PlayerId[g_ModelsCount],24, arg1)
g_ModelInfo[0][g_ModelsCount] = Tmodelind
g_ModelInfo[1][g_ModelsCount] = CTmodelind
g_ModelsCount++
}
}

}

#if DEBUG_MODE == 1
server_print(DEBUG_MSG_END)
if (line == 0){
format (logmsg,65,"%s models.ini EMPTY OR NOT FOUND",DEBUG_MSG_ERROR)
debugMsg (logmsg)
}
#endif


}

// ---- [End of Precache]


// ---- [reset models functions]

public auto_balance_triggered(){

new id
new name [32]
new logdata0[128]

read_logargv(0,logdata0,127)
parse_loguser(logdata0, name, 31)
id = get_user_index(name)
if(g_ModelStatus[id] != STATUS_MODEL_NOTSET)
g_ModelStatus[id] |= STATUS_MODEL_RESET
else
g_ModelStatus[id] = STATUS_MODEL_NOTSET

}

public client_infochanged (id){
if(g_ModelStatus[id] != STATUS_MODEL_NOTSET)
g_ModelStatus[id] |= STATUS_MODEL_RESET
else
g_ModelStatus[id] = STATUS_MODEL_NOTSET
}

public client_command (id) {
// check if a player selected another team
new arg[13]

if (read_argv(0, arg, 12) > 11)
return PLUGIN_CONTINUE

if (equal("chooseteam",arg) || equal ("jointeam",arg)){
#if DEBUG_MODE == 1
new playername[32]
get_user_name (id,playername,31)
format(logmsg,191,"%s%s%s(%d)",DEBUG_MSG_LOG,"RESET MODEL OF ",playername,id)
debugMsg (logmsg)
#endif
g_ModelStatus[id] = STATUS_MODEL_NOTSET

}

return PLUGIN_CONTINUE
}


public client_disconnected(id) {

g_ModelStatus[id] = STATUS_MODEL_NOTSET
#if DEBUG_MODE == 1
format (logmsg,191,"%s%s%d",DEBUG_MSG_LOG,"DISCONNECTED slot ",id)
debugMsg (logmsg)
#endif

}

// ---- [end of reset models functions]


// ---- [set models]

public set_players_models(id) {

if(!is_user_connected(id))
return PLUGIN_CONTINUE

if (cs_get_user_vip(id))
g_ModelStatus[id] = STATUS_MODEL_NOTSET

//#if DEBUG_MODE == 1
new playername[32]
get_user_name (id,playername,31)
//#endif

if(g_ModelStatus[id] & STATUS_MODEL_RESET) {
//if(!(g_ModelStatus[id] & STATUS_MODEL_NOMODEL))
if(!zp_get_user_zombie(id) || !zp_get_user_first_zombie(id))
{
cs_reset_user_model(id)
}
g_ModelStatus[id] = STATUS_MODEL_NOTSET
}
else if(!zp_get_user_nemesis(id))
{
cs_reset_user_model(id)
}
else if(!zp_get_user_last_zombie(id))
{
cs_reset_user_model(id)
}


if (g_ModelStatus[id] != STATUS_MODEL_NOTSET && !get_cvar_num("amx_playermodel_round_checkid")) {
#if DEBUG_MODE == 1
format (logmsg,191,"%s%s%s(%d)",DEBUG_MSG_LOG,"WON'T SET MODEL THIS TIME BECAUSE IT'S ALREADY BEEN SET ",playername,id)
debugMsg (logmsg)
#endif
return PLUGIN_CONTINUE
}

//new id = read_data (1)
new authid[50]

#if DEBUG_MODE == 1
new ip[200]
new steamid[32]
get_user_ip (id,ip,199)
get_user_authid (id,steamid,31)
format (logmsg,191,"%s%s%s(%d) - ip:%s, steamid:%s",DEBUG_MSG_LOG," PLAYER CHECK MODEL UPDATE: ",playername,id,ip,steamid)
debugMsg (logmsg)
#endif

// avoid extra processing - models are only set when needed


new authtype
new checkid
new index
new currentmodel[32]
new params[3]
new name[32]
get_user_name(id, name, 31)

cs_get_user_model(id, currentmodel, 31)

for (index = 0; index < g_ModelsCount; index++) {
if(equal(g_PlayerId[index], REPLACEMENT_SIGN)) {
if(equali(g_PrecachedList[g_ModelInfo[0][index]], currentmodel)) {
params[0] = id
params[1] = SETMODEL_REPLACE
params[2] = index
server_print("$$%d", index)
//if(task_exists(id))
set_task (0.8,"set_model",id,params,3)
return PLUGIN_CONTINUE
}
}
}

for (index = 0; index < g_ModelsCount; index ++) {
if(equal(g_PlayerId[index], REPLACEMENT_SIGN))
continue
check_authtype(id,g_PlayerId[index],authtype,checkid,authid)
if (checkid)
break
}

params[0] = id //playerid

if (checkid)
params[1] = index
else if (is_user_bot(id)) {
if((g_BotsModel[0]>-1) && (g_BotsModel[1]>-1)) {
params[1] = SETMODEL_BOTDEFAULT
}
else {
g_ModelStatus[id] = STATUS_MODEL_NOMODEL
return PLUGIN_CONTINUE
}
}
else if(g_DefaultModel[0] > -1 && g_DefaultModel[1] > -1) {
params[1] = SETMODEL_DEFAULT
}
else {
g_ModelStatus[id] = STATUS_MODEL_NOMODEL
return PLUGIN_CONTINUE
}

// this delay prevents some bugs.
set_task (0.8,"set_model",id,params,3)


#if DEBUG_MODE == 1
switch (authtype){
case AUTH_TYPE_BOTNAME: {
format (logmsg,191,"%s%s%s(%d)",DEBUG_MSG_LOG,"AUTH TYPE = NAME FOR BOT: ",playername,id)
debugMsg (logmsg)
}
case AUTH_TYPE_STEAMID: {
format (logmsg,191,"%s%s%s(%d) - steamid: %s",DEBUG_MSG_LOG,"AUTH TYPE = STEAMID FOR USER: ",playername,id,authid)
debugMsg (logmsg)
}
case AUTH_TYPE_IP: {
format (logmsg,191,"%s%s%s(%d) - ip: %s",DEBUG_MSG_LOG,"AUTH TYPE = IP FOR USER: ",playername,id,authid)
debugMsg (logmsg)
}
}
#endif

return PLUGIN_CONTINUE
}

public set_model (const params[]){

new id = params[0] // playerid.
new ind = params[1] // model index.
new team

team = get_user_team(id) - 1

if (team>=0 && team<2){

if(ind == SETMODEL_REPLACE) {
new ind2 = params[2]
if(g_ModelInfo[1][ind2] != NULLINDEX) {
cs_set_user_model(id, g_PrecachedList[g_ModelInfo[1][ind2]])
g_ModelStatus[id] = STATUS_MODEL_REPLACEMENT
#if DEBUG_MODE == 1
new playername[32]
get_user_name(id, playername, 31)
format(logmsg, 191, "%s <%s> MODEL REPLACED %s->%s",
DEBUG_MSG_LOG,
playername,
g_PrecachedList[g_ModelInfo[0][ind2]],
g_PrecachedList[g_ModelInfo[1][ind2]])
#endif
}
}

//else if(ind & SETMODEL_RESET)
// cs_reset_user_model(id)
else if(ind == SETMODEL_BOTDEFAULT) {
if(g_BotsModel[team] != NULLINDEX) {
cs_set_user_model (id, g_PrecachedList[g_BotsModel[team]])
g_ModelStatus[id] = STATUS_MODEL_BOTDEFAULT
}
}
else if(ind == SETMODEL_DEFAULT) {
if(g_DefaultModel[team] != NULLINDEX) {
cs_set_user_model (id, g_PrecachedList[g_DefaultModel[team]])
g_ModelStatus[id] = STATUS_MODEL_DEFAULT
}
}

else {
if(g_ModelInfo[team][ind] != NULLINDEX) {
cs_set_user_model (id, g_PrecachedList[g_ModelInfo[team][ind]])
#if DEBUG_MODE == 1
new playername[32]
get_user_name (id,playername,31)
format (logmsg,191,"%s%s<%s(%d)> HAS BEEN SET TO <%s>",DEBUG_MSG_LOG,"MODEL OF ",playername,id,g_PrecachedList[g_ModelInfo[team][ind]])
debugMsg (logmsg)
#endif
g_ModelStatus[id] = STATUS_MODEL_SETBYID
}
}

}

}
// ---- [end of set models]
__________________
Just Interest to learning C++/Pawn Code/AmxModX
DarkLegacy is offline
DarkLegacy
Junior Member
Join Date: Feb 2021
Old 07-09-2021 , 17:07   Re: How To Reset User Model When Be Zombie
Reply With Quote #2

nvm
__________________
Just Interest to learning C++/Pawn Code/AmxModX
DarkLegacy is offline
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 03:37.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode