/*CWC SCORE*/ #include <core> #include <string> #include <admin> #include <plugin> #include <adminlib> #pragma dynamic 16384 #define ACCESS_CONSOLE 131072 #define ACCESS_WAR 256 new AM_VERSION_STRING[] = "cwc_3.0.1_score_1.0"; new g_ScoreFile[MAX_TEXT_LENGTH]="addons/adminmod/config/cwcreator/cwcscore.txt"; new g_status_plugin=1; new g_maxplayers; new g_plugin; new g_cwround; new g_restart; new g_Map1[MAX_NAME_LENGTH]; new g_Map2[MAX_NAME_LENGTH]; new g_OwnTag[MAX_NAME_LENGTH]; new g_OppTag[MAX_NAME_LENGTH]; new g_maxrounds; /*Wenn gesetzt, dann hört das Plugin bei erreichter Punktzahl auf zu zählen*/ new g_mapround; new g_CurrentMap[MAX_NAME_LENGTH]; new g_Tag1[MAX_NAME_LENGTH]; new g_Tag2[MAX_NAME_LENGTH]; new g_ScoreT[6]; new g_ScoreCT[6]; new g_UserMenu[MAX_PLAYERS]; /*TOTAL SCORE*/ new g_iScoreMap1Own; new g_iScoreMap2Own; new g_iScoreMap1Opp; new g_iScoreMap2Opp; /*ATTACKER WINS*/ new g_iAttScoreMap1Own; new g_iAttScoreMap2Own; new g_iAttScoreMap1Opp; new g_iAttScoreMap2Opp; public plugin_init() { plugin_registerinfo("CWC-SCORE","Counts team score in CW",AM_VERSION_STRING); plugin_registercmd("admin_war_score","admin_war_score",ACCESS_WAR,"admin_war_score <on/off>: disables cwc score plugin"); plugin_registercmd("say","HandleSay",ACCESS_ALL,"say .score: displays current cw-team-score"); /*Reagieren auf CWC Befehle*/ plugin_registercmd("cwc_addon_set","cwc_addon_set",ACCESS_WAR); plugin_registercmd("cwc_addon_start","cwc_addon_start",ACCESS_WAR); plugin_registercmd("cwc_addon_end","cwc_addon_end",ACCESS_WAR); /*LogD-Funktionen*/ plugin_registercmd("cwc_team", "cwc_handler", ACCESS_CONSOLE, ""); plugin_registercmd("cwc_world", "cwc_handler", ACCESS_CONSOLE, ""); plugin_registercmd("cwc_score", "cwc_handler", ACCESS_CONSOLE, ""); exec( "logd_reg 61 admin_command cwc_team" ); exec( "logd_reg 62 admin_command cwc_world"); exec( "logd_reg 65 admin_command cwc_score"); /*Menü-Handling*/ plugin_registercmd("menuselect","menuselect",ACCESS_ALL); plugin_registercmd("radio1","SetMenuData",ACCESS_ALL); plugin_registercmd("radio2","SetMenuData",ACCESS_ALL); plugin_registercmd("radio3","SetMenuData",ACCESS_ALL); plugin_registercmd("buyequip","SetMenuData",ACCESS_ALL); plugin_registercmd("buy","SetMenuData",ACCESS_ALL); plugin_registercmd("chooseteam","SetMenuData",ACCESS_ALL); plugin_registercmd("showbriefing","SetMenuData",ACCESS_ALL); /*Settings-Daten*/ load_settings(); return PLUGIN_CONTINUE; } /////////////////// // AM-FUNKTIONEN // /////////////////// public admin_war_score(HLCommand,HLData,HLUserName,UserIndex){ new Data[MAX_DATA_LENGTH]; new iSet; convert_string(HLData,Data,MAX_DATA_LENGTH); iSet=check_param(Data); if(iSet){ selfmessage("[CWC-SCORE] Plugin is enabled!"); g_status_plugin=1; }else{ selfmessage("[CWC-SCORE] Plugin is disabled!"); g_status_plugin=0; } return PLUGIN_HANDLED; } public HandleSay(HLCommand,HLData,HLUserName,UserIndex){ if(g_status_plugin){ new Data[MAX_DATA_LENGTH]; new UserName[MAX_NAME_LENGTH]; convert_string(HLData,Data,MAX_DATA_LENGTH); convert_string(HLUserName,UserName,MAX_DATA_LENGTH); strstripquotes(Data); if(strcmp(Data,".score")==0){ set_menu(UserName); return PLUGIN_HANDLED; } } return PLUGIN_CONTINUE; } /*CWC-SETTINGS CHANGED*/ public cwc_addon_set(HLCommand,HLData,HLUserName,UserIndex){ if(g_status_plugin){ load_settings(); } return PLUGIN_CONTINUE; } load_settings(){ g_maxplayers=maxplayercount(); get_vaultnumdata("CWC_MAXROUNDS",g_maxrounds); get_vaultnumdata("CWC_SCORE_ROUND",g_cwround); get_vaultdata("CWC_TAG",g_OwnTag,MAX_NAME_LENGTH); get_vaultdata("CWCI_OPPONENT",g_OppTag,MAX_NAME_LENGTH); get_vaultdata("CWC_MAP1",g_Map1,MAX_NAME_LENGTH); get_vaultdata("CWC_MAP2",g_Map2,MAX_NAME_LENGTH); currentmap(g_CurrentMap,MAX_NAME_LENGTH); } /*VOTE SUCCESSFUL in CWC*/ public cwc_addon_start(HLCommand,HLData,HLUserName,UserIndex){ if(g_status_plugin){ if(!g_plugin){ g_plugin=1; g_cwround++; } say("[CWC-SCORE] Team-Score-Counter starts counting!"); } return PLUGIN_CONTINUE; } /////////////////////// /// LOGD - HANDLING /// /////////////////////// public cwc_handler(HLCommand,HLData,HLUserName,UserIndex){ if(g_plugin){ new Command[MAX_COMMAND_LENGTH]; new Data[MAX_DATA_LENGTH]; convert_string(HLCommand,Command,MAX_COMMAND_LENGTH); convert_string(HLData,Data,MAX_DATA_LENGTH); switch(Command[4]){ case 'w': worldaction(Data); case 't': teamaction(Data); case 's': score(); } } return PLUGIN_CONTINUE; } worldaction(Data[]){ if(Data[8]=='R' && !g_restart || Data[0]=='G'){ g_restart=1; g_mapround=0; strinit(g_ScoreCT); strinit(g_ScoreT); detect_team(); }else if(Data[6]=='S') { g_restart=0; } } detect_team(){ new Player[MAX_NAME_LENGTH]; new i; new iTeam; for(i=1;i<=g_maxplayers;i++){ if(playerinfo(i,Player,MAX_NAME_LENGTH,_,_,iTeam)){ if(strstrx(Player,g_OwnTag)!=-1){ if(iTeam==2){ strcpy(g_Tag1,g_OwnTag,MAX_NAME_LENGTH); strcpy(g_Tag2,g_OppTag,MAX_NAME_LENGTH); }else if(iTeam==1){ strcpy(g_Tag1,g_OppTag,MAX_NAME_LENGTH); strcpy(g_Tag2,g_OwnTag,MAX_NAME_LENGTH); } break; } } } say("[CWC-SCORE] Team-Detection finished!"); } teamaction(Data[]){ new Data1[MAX_DATA_LENGTH]; new Data2[MAX_DATA_LENGTH]; new Action[MAX_NAME_LENGTH]; new dummy[10]; strbreak(Data,Data1,Data2,MAX_DATA_LENGTH); strsplit(Data2, "# " ,Action,MAX_DATA_LENGTH,dummy,10,g_ScoreCT,6,dummy,10,g_ScoreT,6); g_mapround++; if(g_mapround==g_maxrounds){ g_plugin=0; say("[CWC-SCORE] Team-Score-Counter stopped. MAXROUNDS reached!"); } set_data(); set_menu(); return PLUGIN_CONTINUE; } score(){ if(!g_restart){ set_data(); } } set_data(){ new Vault[MAX_NAME_LENGTH]; new Data[MAX_DATA_LENGTH]; set_vaultnumdata("CWC_SCORE_ROUND",g_cwround); snprintf(Vault,MAX_NAME_LENGTH,"CWC_SCORE_ROUND_%i",g_cwround); snprintf(Data,MAX_DATA_LENGTH,"%s®%s®%s®%s®%s",g_CurrentMap,g_Tag1,g_ScoreCT,g_Tag2,g_ScoreT); set_vaultdata(Vault,Data); //say("[CWC-SCORE] Team-Score written to vault.ini!"); } set_menu(User[]=""){ new Text[512]; new Data[MAX_DATA_LENGTH]; new Vault[MAX_NAME_LENGTH]; new MapName[MAX_NAME_LENGTH]; new Tag1[MAX_NAME_LENGTH]; new Tag2[MAX_NAME_LENGTH]; new ScoreCT[6]; new ScoreT[6]; new i; snprintf(Text,512,"\y[CWC-SCORE]^n"); for(i=1;i<=g_cwround;i++){ strinit(Data); snprintf(Vault,MAX_NAME_LENGTH,"CWC_SCORE_ROUND_%i",i); get_vaultdata(Vault,Data,MAX_DATA_LENGTH); strsplit(Data,"®",MapName,MAX_NAME_LENGTH,Tag1,MAX_NAME_LENGTH,ScoreCT,6,Tag2,MAX_NAME_LENGTH,ScoreT,6); snprintf(Text,512,"%s^n\w%i. %s:^n\y%s:\w%s -- \r%s:\w%s",Text,i,MapName,Tag1,ScoreCT,Tag2,ScoreT); } if(g_plugin){ display_menu(Text,User); }else{ display_menu(Text,User,1023,60); } } /*CW ENDS*/ public cwc_addon_end(HLCommand,HLData,HLUserName,UserIndex){ g_plugin=0; say("[CWC-SCORE] Team-Score-Counter stopped. CW ends. Calculating results!"); calculate_score(); return PLUGIN_CONTINUE; } calculate_score(){ new Data[MAX_DATA_LENGTH]; new Vault[MAX_NAME_LENGTH]; new MapName[MAX_NAME_LENGTH]; new Tag1[MAX_NAME_LENGTH]; new Tag2[MAX_NAME_LENGTH]; new ScoreCT[6]; new ScoreT[6]; new iScoreCT; new iScoreT; new i; writefile(g_ScoreFile,"----------------------------------------",-1); writefile(g_ScoreFile,"",-1); servertime(Data,MAX_DATA_LENGTH,"*** CW vom %d.%m.%y um %H:%M:%S Uhr ***"); writefile(g_ScoreFile,Data,-1); writefile(g_ScoreFile,"",-1); writefile(g_ScoreFile,"********** EINZEL-ERGEBNISSE: **********",-1); writefile(g_ScoreFile,"",-1); for(i=1;i<=g_cwround;i++){ strinit(Data); snprintf(Vault,MAX_NAME_LENGTH,"CWC_SCORE_ROUND_%i",i); get_vaultdata(Vault,Data,MAX_DATA_LENGTH); strsplit(Data,"®",MapName,MAX_NAME_LENGTH,Tag1,MAX_NAME_LENGTH,ScoreCT,6,Tag2,MAX_NAME_LENGTH,ScoreT,6); strsubst(Data,"®"," : ",MAX_DATA_LENGTH); writefile(g_ScoreFile,Data,-1); iScoreT=strtonum(ScoreT); iScoreCT=strtonum(ScoreCT); if(strcmp(Tag1,g_OwnTag)==0){ if(strcmp(MapName,g_Map1)==0){ g_iScoreMap1Own+=iScoreCT; g_iScoreMap1Opp+=iScoreT; g_iAttScoreMap1Opp+=iScoreT; }else{ g_iScoreMap2Own+=iScoreCT; g_iScoreMap2Opp+=iScoreT; g_iAttScoreMap2Opp+=iScoreT; } }else{ if(strcmp(MapName,g_Map1)==0){ g_iScoreMap1Opp+=iScoreCT; g_iScoreMap1Own+=iScoreT; g_iAttScoreMap1Own+=iScoreT; }else{ g_iScoreMap2Opp+=iScoreCT; g_iScoreMap2Own+=iScoreT; g_iAttScoreMap2Own+=iScoreT; } } set_vaultdata(Vault,""); } set_vaultdata("CWC_SCORE_ROUND",""); writefile(g_ScoreFile,"",-1); writefile(g_ScoreFile,"********** ALL POINTS: **********^n",-1); snprintf(Data,512,"Map %s:^n%s : %i -- %s : %i^n^nMap %s:^n%s : %i -- %s : %i^n^nTOTAL:^n%s : %i -- %s : %i^n",g_Map1,g_OwnTag,g_iScoreMap1Own,g_OppTag,g_iScoreMap1Opp,g_Map2,g_OwnTag,g_iScoreMap2Own,g_OppTag,g_iScoreMap2Opp,g_OwnTag,g_iScoreMap1Own+g_iScoreMap2Own,g_OppTag,g_iScoreMap1Opp+g_iScoreMap2Opp); writefile(g_ScoreFile,Data,-1); writefile(g_ScoreFile,"********** ATTACKER WINS: **********^n",-1); snprintf(Data,512,"Map %s:^n%s : %i -- %s : %i^n^nMap %s:^n%s : %i -- %s : %i^n^nTOTAL:^n%s : %i -- %s : %i^n",g_Map1,g_OwnTag,g_iAttScoreMap1Own,g_OppTag,g_iAttScoreMap1Opp,g_Map2,g_OwnTag,g_iAttScoreMap2Own,g_OppTag,g_iAttScoreMap2Opp,g_OwnTag,g_iAttScoreMap1Own+g_iAttScoreMap2Own,g_OppTag,g_iAttScoreMap1Opp+g_iAttScoreMap2Opp); writefile(g_ScoreFile,Data,-1); writefile(g_ScoreFile,"----------------------------------------",-1); score_results1(); } score_results1(User[]=""){ new Text[512]; snprintf(Text,512,"\y[CW-SCORE-RESULTS]^n\wALL POINTS:^nMap %s:^n\y%s : %i \w-- \r%s : %i^n\wMap %s:^n\y%s : %i \w-- \r%s : %i^n^n\wTOTAL:^n\y%s : %i \w-- \r%s : %i^n^n\w1. ATTACKER-WINS -- 0.CANCEL",g_Map1,g_OwnTag,g_iScoreMap1Own,g_OppTag,g_iScoreMap1Opp,g_Map2,g_OwnTag,g_iScoreMap2Own,g_OppTag,g_iScoreMap2Opp,g_OwnTag,g_iScoreMap1Own+g_iScoreMap2Own,g_OppTag,g_iScoreMap1Opp+g_iScoreMap2Opp); display_menu(Text,User,513,60,2); } score_results2(User[]=""){ new Text[512]; snprintf(Text,512,"\y[CW-SCORE-RESULTS]^n\wATTACKER WINS:^nMap %s:^n\y%s : %i \w-- \r%s : %i^n\wMap %s:^n\y%s : %i \w-- \r%s : %i^n^n\wTOTAL:^n\y%s : %i \w-- \r%s : %i^n^n\w1. ALL WINS -- 0.CANCEL",g_Map1,g_OwnTag,g_iAttScoreMap1Own,g_OppTag,g_iAttScoreMap1Opp,g_Map2,g_OwnTag,g_iAttScoreMap2Own,g_OppTag,g_iAttScoreMap2Opp,g_OwnTag,g_iAttScoreMap1Own+g_iAttScoreMap2Own,g_OppTag,g_iAttScoreMap1Opp+g_iAttScoreMap2Opp); display_menu(Text,User,513,60,3); } display_menu(Text[],User[]="",keys=1023,iTime=8,MenuID=1){ new Player[MAX_NAME_LENGTH]; new i; if(strlen(User)==0){ for(i=1;i<=g_maxplayers;i++){ if(playerinfo(i,Player,MAX_NAME_LENGTH)){ menu(Player,Text,1023,8); g_UserMenu[i]=MenuID; } } }else{ get_userindex(User,i); g_UserMenu[i]=MenuID; menu(User,Text,keys,iTime); } } public SetMenuData(HLCommand,HLData,HLUserName,UserIndex){ if(g_UserMenu[UserIndex]!=0){ reset_menu(UserIndex); } return PLUGIN_CONTINUE; } public menuselect(HLCommand,HLData,HLUserName,UserIndex){ new Data[MAX_DATA_LENGTH]; new Player[MAX_NAME_LENGTH]; new iSelect; convert_string(HLData,Data,MAX_DATA_LENGTH); convert_string(HLUserName,Player,MAX_NAME_LENGTH); iSelect=strtonum(Data); if(g_UserMenu[UserIndex]!=0){ if(g_UserMenu[UserIndex]==1){ reset_menu(UserIndex); return PLUGIN_CONTINUE; } if(iSelect==1){ if(g_UserMenu[UserIndex]==2){ score_results2(Player); }else if(g_UserMenu[UserIndex]==3){ score_results1(Player); } }else{ reset_menu(UserIndex); } } return PLUGIN_CONTINUE; } reset_menu(UserIndex){ g_UserMenu[UserIndex]=0; }