RSSy MYGO.pl Opublikowano Grudzień 7, 2020 o 12:08 RSSy Udostępnij Opublikowano Grudzień 7, 2020 o 12:08 Good morning, does anyone have an idea why it doesn't work for me? It compiles fine but when installing it it doesn't work I get an error. and in the log it does not leave me any file at all. PHP Code: /* Description: Hi all! :) With this plugin round end will not be forced , when bomb has been defused or it has exploded.. Also fixed bug when fake team bots get bomb and so until round end U can't use it. After bomb defused/expoded it's spawning again.. It's advatage among others Like Fake c4.. that it is not changing the whole Counter-Strike Planting system, but just the last milliseconds, so bots will equally use this system, and ofcource it looks same like real.. Cvars: amx_defusemessage - Enable message "Bomb Has Been Defused" Default:1 amx_defusesound - if 1: sound when bomb defused would be "CT's win", if 2: "Bomb Has Been Defused", 0: Disabled Default:1 amx_plantmessage - Enable message "Bomb Has Been Planted" Default:1 amx_plantsound - Enable sound "Bomb Has Been Planted" Default:1 amx_defuserfrags - How many frags player get for defusing the bomb Default:3 amx_scoreblowup - How many score points team get for Exploding the bomb Default:1 amx_scoredefuse - How many score points team get for Defusing the bomb Default:1 amx_c4damage - bomb expolosion max damage Default:400.0 amx_c4radius - bomb explosion radius Default:1000.0 changelog: *v1.0 - First relese *v1.1 - Fixed Bug when after death, droping bomb and respawning user couldn't see the bomb on radar. - support "Roundend Blocker" fake team bots (by Nextra) - fixed small bug in score attribute message code *v1.2 - fixed bug in fake team bots check code P.s: Great Thx to VEN for "CS Bomb Scripting tutorial", to Alka for fakedamage stock code and to jim_yang for msghelper module. */ #include <amxmodx> #include <fakemeta_util> #include <csdm> #define CAN_PLANT_BOMB (1<<8) #if cellbits == 32 const OFFSET_CSTEAMS = 114 const OFFSET_BOMB_DEFUSE = 193 const OFFSET_CSDEATHS = 444 #else const OFFSET_CSTEAMS = 139 const OFFSET_BOMB_DEFUSE = 219 const OFFSET_CSDEATHS = 493 #endif const OFFSET_LINUX = 5 enum { CS_TEAM_UNASSIGNED = 0, CS_TEAM_T, CS_TEAM_CT, CS_TEAM_SPECTATOR } new g_MaxPlayers, g_Sprite new g_LastDefusing, g_DefusingDuration, g_Defuser new g_msgScoreInfo, g_msgTextMsg, g_msgTeamScore, g_msgSendAudio, g_msgBombPickup, g_msgStatusIcon, g_msgScoreAttrib, g_msgBombDrop new cvar_DefuseMessage, cvar_DefuseSound, cvar_PlantSound, cvar_PlantMessage, cvar_DefuserFrags, cvar_c4Damage, cvar_c4Radius, cvar_ScorePlant, cvar_ScoreDefuse new Faketeambot[33], RefreshBomb[33] public plugin_init() { register_plugin("Planting Normalizer", "1.2", "Empower") // if there is no plant on current map stop the plugin if(!bomb_target_exists()) return PLUGIN_HANDLED_MAIN; register_event("Scenario", "event_CheckBombExplode", "a", "1=0") register_event("BarTime", "event_StopDefusing", "b", "1=0") register_logevent("defusing_with_kit", 3, "2=Begin_Bomb_Defuse_With_Kit") register_logevent("defusing_without_kit", 3, "2=Begin_Bomb_Defuse_Without_Kit") register_logevent("droped_bomb", 3, "2=Dropped_The_Bomb") register_forward(FM_CmdStart,"fw_CmdStart") g_msgBombDrop = get_user_msgid("BombDrop"); g_msgBombPickup = get_user_msgid("BombPickup"); g_msgScoreAttrib = get_user_msgid("ScoreAttrib"); g_msgScoreInfo = get_user_msgid("ScoreInfo"); g_msgSendAudio = get_user_msgid("SendAudio"); g_msgStatusIcon = get_user_msgid("StatusIcon"); g_msgTeamScore = get_user_msgid("TeamScore"); g_msgTextMsg = get_user_msgid("TextMsg"); cvar_DefuseMessage = register_cvar("amx_defusemessage", "1") cvar_DefuseSound = register_cvar("amx_defusesound", "1") cvar_PlantSound = register_cvar("amx_plantsound","1") cvar_PlantMessage = register_cvar("amx_plantmessage","1") cvar_DefuserFrags = register_cvar("amx_defuserfrags","3") cvar_ScorePlant = register_cvar("amx_scoreblowup","1") cvar_ScoreDefuse = register_cvar("amx_scoredefuse","1") cvar_c4Damage = register_cvar("amx_c4damage","400.0") cvar_c4Radius = register_cvar("amx_c4radius","1000.0") g_MaxPlayers = get_maxplayers(); return PLUGIN_CONTINUE; } public plugin_precache() g_Sprite = precache_model("sprites/eexplo.spr"); // here we check if the player is fake team bot public client_putinserver(id) { if(!is_user_bot(id)) return; static user_name[32] get_user_name(id,user_name,31) //for old round_nonstop versions (by Simon Logic) if(equal(user_name,".") || equal(user_name,":")) { Faketeambot[id] = true; return; } //for new versions of round_nonstop (by Simon Logic) if(cvar_exists("amx_round_nonstop_botname_t")) { static botnameT[32], botnameCT[32] get_cvar_string("amx_round_nonstop_botname_t",botnameT,31) get_cvar_string("amx_round_nonstop_botname_ct",botnameCT,31) if(equal(user_name,botnameT) || equal(user_name,botnameCT)) { Faketeambot[id] = true; return; } } //for Roundend Blocker (by Nextra) Default names if(equal(user_name,"Have Fun") || equal(user_name,"Good Luck")) { Faketeambot[id] = true; return; } //for Roundend Blocker (by Nextra) cvars if(cvar_exists("reb_name1")) { static botname[32],szTmp[16] for( new i = 1; i <= 32; i++ ) { formatex( szTmp, charsmax(szTmp), "reb_name%i", i); //if no name cvars next then return function if(!cvar_exists(szTmp)) return; get_cvar_string(szTmp, botname,31) if(equal(user_name,botname)) { Faketeambot[id] = true; return; } } } } public client_disconnected(id) Faketeambot[id] = false; public fw_CmdStart(id, handle) { if(!g_LastDefusing) return; //if(get_gametime()-g_LastDefusing>=g_DefusingDuration) <---- this doesn't work as needed so I used floatadd if(float:floatadd(floatmul(Float:g_LastDefusing,-1.0),get_gametime())>=float:g_DefusingDuration) { // unpressing USE key 0.1 sec berofe defused, so round end wouldn't be forced set_uc(handle, UC_Buttons, get_uc(handle, UC_Buttons) & ~IN_USE) //engclient_cmd(g_Defuser,"-use") <--- this is worst way could not affect in time new ent; if( (ent = fm_find_ent_by_model(-1, "grenade", "models/w_c4.mdl")) ) fm_remove_entity(ent) // remove real bomb ct_win() // show message and play sound and give score points; if(is_user_connected(g_Defuser)) { //give frags to defuser set_pev(g_Defuser, pev_frags,float(pev(g_Defuser, pev_frags)+get_pcvar_num(cvar_DefuserFrags))) updatefrags(g_Defuser) // update scoreboard } g_LastDefusing = 0 } } public csdm_PostSpawn(id) { //refresh the radar (bugfix) if(RefreshBomb[id]) { drawradar_bomb(id) RefreshBomb[id] = false; return; } if(!is_user_connected(id) || Faketeambot[id] || fm_get_user_team(id)!=CS_TEAM_T) return; new bomb // if someone has the bomb if((bomb = fm_find_ent_by_class(-1, "weapon_c4"))) { new owner = pev(bomb,pev_owner) if(!is_user_connected(owner)) return; // if fake team bot has the bomb if(!Faketeambot[owner]) return; // transfer bomb to player that is respawning fm_transfer_user_gun(owner, id, CSW_C4) } // if no bomb planted else if(!fm_find_ent_by_model(-1, "grenade", "models/w_c4.mdl")) { //give it to user that is respawning fm_give_item(id, "weapon_c4") // set him planting valid, //draw hud icon and set score attribute fm_set_user_plant(id) } } // called before bomb explosion public event_CheckBombExplode() { new ent // check is bomb planted if( (ent = fm_find_ent_by_model(-1, "grenade", "models/w_c4.mdl")) ) { static Float:vOrigin[3]; pev(ent, pev_origin, vOrigin); // making fakedamage and explosion fakedamage(vOrigin, get_pcvar_float(cvar_c4Damage), get_pcvar_float(cvar_c4Radius)) // making fake dmg and explosion terrorist_win() // show message and play sound and give score points; if(pev_valid(ent)) fm_remove_entity(ent) // remove real bomb so round end wouldn't be forced } } public event_StopDefusing() g_LastDefusing = 0 public defusing_with_kit() { g_Defuser = get_loguser_index(); g_LastDefusing = float:get_gametime() g_DefusingDuration = float:4.9 } public defusing_without_kit() { g_Defuser = get_loguser_index() g_LastDefusing = float:get_gametime() g_DefusingDuration = float:9.9 } public droped_bomb() { new Droper = get_loguser_index() //if user droped bomb and died if(is_user_alive(Droper)) return; // refresh his radar when he will respawn (bugfix) RefreshBomb[Droper] = true; } public task_respawn(id) { if(!is_user_alive(id)) csdm_respawn(id) } //updates bomb on radar (buxfix) stock drawradar_bomb(id) { if(!is_user_connected(id)) return; new bomb = fm_find_ent_by_class(-1, "weapon_c4") //check if bomb is steal droped if (bomb && pev(bomb, pev_owner) > get_maxplayers()) { new Float:fOrigin[3] pev(bomb,pev_origin,fOrigin) // draw bomb on radar message_begin(MSG_ONE, g_msgBombDrop, _, id) write_coord(floatround(fOrigin[0])) // coord X write_coord(floatround(fOrigin[1])) // coord Y write_coord(floatround(fOrigin[2])) // coord Z write_byte(0) // droped message_end() } } //by Alka stock fakedamage(Float:origin[3], Float:damage, Float:range) { // creates explosion message_begin(MSG_BROADCAST, SVC_TEMPENTITY); write_byte(TE_EXPLOSION); write_coord(floatround(origin[0])); write_coord(floatround(origin[1])); write_coord(floatround(origin[2])); write_short(g_Sprite); write_byte(80); write_byte(15); write_byte(0); message_end(); static Float:vOrigin[3], Float:fDistance, Float:fTmpDmg; // loop through all player for(new i = 1 ; i <= g_MaxPlayers ; i++) { if(!is_user_alive(i)) continue; // get user position pev(i, pev_origin, vOrigin); // check the distance to the bomb fDistance = vector_distance(origin, vOrigin); //if player is in explode range if(fDistance <= range) { // calculate damage fTmpDmg = damage - (damage / range) * fDistance; // hurt him fm_fakedamage(i, "trigger_hurt" , fTmpDmg, DMG_BLAST) // respawn player (bugfix) sometimes csdm doesn't do it automaticaly // after bomb explosion set_task(3.0,"task_respawn",i) } } } stock terrorist_win() { // sound "Terrorist win" if(get_pcvar_num(cvar_PlantSound)) { message_begin(MSG_BROADCAST, g_msgSendAudio, _, 0) write_byte(0) write_string("%!MRAD_terwin") write_short(100) message_end() } // message "Target Bombed" if(get_pcvar_num(cvar_PlantMessage)) { message_begin(MSG_ALL, g_msgTextMsg, _, 0) write_byte(4) write_string("#Target_Bombed") message_end() } // give a score points to terrorist message_begin(MSG_ONE, g_msgTeamScore, _, 1) write_string("TERRORIST") write_short(get_pcvar_num(cvar_ScorePlant)) message_end() //remove bomb from the radar message_begin(MSG_ALL, g_msgBombPickup, _, 0) message_end() } stock ct_win() { // sound "counter-terrorist win" if(get_pcvar_num(cvar_DefuseSound)==1) { message_begin(MSG_BROADCAST, get_user_msgid("SendAudio"), _, 0) write_byte(0) write_string("%!MRAD_ctwin") write_short(100) message_end() } // sound "bomb has been defused" else if(get_pcvar_num(cvar_DefuseSound)==2) { message_begin(MSG_BROADCAST, get_user_msgid("SendAudio"), _, 0) write_byte(0) write_string("%!MRAD_BOMBDEF") write_short(100) message_end() } // message "bomb has been defused" if(get_pcvar_num(cvar_DefuseMessage)) { message_begin(MSG_ALL, get_user_msgid("TextMsg"), _, 0) write_byte(4) write_string("#Bomb_Defused") message_end() } // give a score points to ct message_begin(MSG_ONE, g_msgTeamScore, _, 1) write_string("CT") write_short(get_pcvar_num(cvar_ScoreDefuse)) message_end() //remove bomb from the radar message_begin(MSG_ALL, g_msgBombPickup, _, 0) message_end() } stock updatefrags(index) { message_begin(MSG_BROADCAST, g_msgScoreInfo) write_byte(index) // id write_short(pev(index, pev_frags)) // frags write_short(fm_get_user_deaths(index)) // deaths write_short(0) // class? write_short(fm_get_user_team(index)) // team message_end() } // by Ven stock get_loguser_index() { new szLoguser[64], szName[32]; read_logargv(0, szLoguser, sizeof szLoguser - 1); parse_loguser(szLoguser, szName, sizeof szName - 1); return get_user_index(szName); } stock bomb_target_exists() { if(fm_find_ent_by_class(-1, "func_bomb_target") || fm_find_ent_by_class(-1, "info_bomb_target")) return 1; return 0; } stock fm_set_user_plant(client) { new kit = get_pdata_int(client, OFFSET_BOMB_DEFUSE, OFFSET_LINUX); if( !(kit & CAN_PLANT_BOMB) ) { set_pdata_int(client, OFFSET_BOMB_DEFUSE, (kit | CAN_PLANT_BOMB), OFFSET_LINUX); // show hud icon message_begin(MSG_ONE, g_msgStatusIcon, _, client); write_byte(1); write_string("c4"); write_byte(0); write_byte(160); write_byte(0); message_end(); // show attribute "Bomb" on the score board emessage_begin(MSG_ALL, g_msgScoreAttrib, _, client) ewrite_byte(client) ewrite_byte(2) emessage_end() } } stock fm_get_user_deaths(id) return get_pdata_int(id, OFFSET_CSDEATHS, OFFSET_LINUX); stock fm_get_user_team(id) return get_pdata_int(id, OFFSET_CSTEAMS, OFFSET_LINUX); Przeczytaj cały wpis Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi