RSSy MYGO.pl Opublikowano Marzec 29, 2021 o 13:34 RSSy Udostępnij Opublikowano Marzec 29, 2021 o 13:34 Does anybody want this for Amxx? Click the quote to get to the zip file. Post if interested. Quote: Originally Posted by No0n3 (Post 461548) Can somone compile it for amxmodx. All files are attached.. (i'm not sure this is right forum :|) PHP Code: /******************************************************************************************************** AMX Gravity Gun Deathmatch Version: 0.3.1 Author: KRoTaL 0.1 Release 0.1.1 Bug fixes 0.2 Now works like the real HL2 gravity gun with the real sounds :) 0.2.1 Added Gauss gun model 0.2.2 Bug fixes 0.3 Added 2 new settings: ggdm_allweapons + ggdm_damage, + the possibility to grab and throw players 0.3.1 Fewer objects should stay in the air Objects will be randomly created on the map (you can configure the models to be used). Grab them and throw them at your ennemies to kill them, or throw them directly if you are close to them. You cannot use any other weapons. To grab an object/player, press the +attack2 button. To throw an object/player, press the +attack button. IMPORTANT: If your server crashes, try reducing the ggdm_objects setting (especially on small maps). Cvars: ggdm_active 0 - 0: disables the plugin 1: enables the plugin (objects will be created next round) ggdm_allweapons 0 - 0: players can only use the gravity gun 1: players can use all the weapons, and the knife is replaced with the gravity gun ggdm_damage 20 - amount of damage done to a player when you throw him ggdm_grabforce 10 - sets the amount of force used when grabbing objects ggdm_throwforce 1400 - sets the power of your throws ggdm_objects 30 - sets how many objects to create on the map (between 1 and 80) ggdm_maxdist 140 - sets how close to an object you need to be to throw it without grabbing it ggdm_maxdist_grab 1500 - sets how close to an object you need to be to grab it Setup: Put these files on your server: addons/amx/plugins/gravitygun_dm.amx addons/amx/lang/ggdm.txt addons/amx/config/ggdm_objects.cfg sound/ggdm/ggdm_throw.mp3 sound/ggdm/ggdm_grab.mp3 sound/ggdm/ggdm_grabbing.mp3 sound/ggdm/ggdm_denythrow.mp3 sound/ggdm/ggdm_denygrab.mp3 You can configure the models to be used for the objects in the ggdm_objects.cfg file. Format: path_of_the_model name_of_the_model MinBox(X_axis) MinBox(Y_axis) MinBox(Z_axis) MaxBox(X_axis) MaxBox(Y_axis) MaxBox(Z_axis) Examples: models/chick.mdl chicken -20 -20 -1 20 20 20 models/w_weaponbox.mdl weaponbox -12 -12 -1 12 12 40 models/filecabinet.mdl filecabinet -16 -16 -1 16 16 60 models/houndeye.mdl houndeye -20 -20 -1 20 20 25 models/w_flashbang.mdl flashbang -10 -10 -1 10 10 10 models/w_smokegrenade.mdl smokegrenade -10 -10 -1 10 10 10 models/w_hegrenade.mdl grenade -10 -10 -1 10 10 10 The name of the model will be used in the death messages: KRoT@L killed T(+)rget with washbasin KRoT@L killed T(+)rget with chicken If you want to type a space in the name of the model, use quotes: models/big_thing.mdl "big thing" -20 -20 -20 20 20 20 Do not forget to put the models on your server to allow people to download them. You need to enable VexdUM. Credits: SpaceDude for his Jedi Grab Plugin Kaddar for his Rune Mod Plugin ********************************************************************************************************/ #include <translator> #include <amxmodx> #include <amxmisc> #include <fun> #include <engine> #include <cstrike> #define KEY_THROW IN_ATTACK #define KEY_GRAB IN_ATTACK2 #define RESET_OWNER 2.2 #define GRAB_SPEED 30 #define MAX_NAME_LENGTH 32 #define MAX_SPAWNS 81 #define BEHINDBASESIZE 1500 #define find_entity #define is_entity new gMsgDeathMsg new SPAWN[MAX_SPAWNS][3] new SPAWNS new SPAWNS_ENABLED new OBJECTS_ENABLED new g_ObjectsNum new g_Model[MAX_SPAWNS][64], g_ModelName[MAX_SPAWNS][32] new g_MinX[MAX_SPAWNS], g_MinY[MAX_SPAWNS], g_MinZ[MAX_SPAWNS] new g_MaxX[MAX_SPAWNS], g_MaxY[MAX_SPAWNS], g_MaxZ[MAX_SPAWNS] new grabbed[33] new grablength[33] new grabbing_player[33] new velocity_multiplier new bool:wait_denygrab[33] new bool:wait_denythrow[33] new bool:active=false new GRAVGUN_VMODEL[64] = "models/v_gauss.mdl" new GRAVGUN_PMODEL[64] = "models/p_gauss.mdl" public plugin_init() { load_translations("ggdm") register_plugin("Gravity Gun DeathMatch", "0.3.1", "KRoTaL") register_cvar("ggdm_active","0") register_cvar("ggdm_allweapons","0") register_cvar("ggdm_damage","20") register_cvar("ggdm_grabforce","10") register_cvar("ggdm_throwforce","1400") register_cvar("ggdm_objects","30") register_cvar("ggdm_maxdist","140") register_cvar("ggdm_maxdist_grab","1500") register_clcmd("say","handle_say") register_clcmd("say_team","handle_say") register_event("CurWeapon","switchweapon","be","1=1") register_event("ResetHUD","reset_hud","b") register_event("DeathMsg","death_event","a") register_logevent("roundstart", 2, "0=World triggered", "1=Round_Start") register_logevent("endround", 2, "0=World triggered", "1=Round_End") gMsgDeathMsg = get_user_msgid("DeathMsg") set_task(0.5, "createSpawns", 0, "", 0) } public ggdm_help(id) { set_hudmessage(255, 255, 255, -1.0, 0.67, 0, 0.01, 12.0, 0.01, 0.01, 2) show_hudmessage(id, _T("WELCOME TO GRAVITY GUN DEATHMATCH!^nPRESS +ATTACK2 BUTTON TO GRAB AN OBJECT.^nPRESS +ATTACK BUTTON TO THROW IT AT YOUR ENNEMIES AND KILL THEM.^nYou can throw an object without grabbing it if you are close to it.^nYou can also grab and throw players.")) return PLUGIN_CONTINUE } public handle_say(id) { if(active) { new said[192] read_args(said,192) remove_quotes(said) if( (containi(said, "ggdm") != -1) || (containi(said, "gravity") != -1) ) { ggdm_help(id) } } return PLUGIN_CONTINUE } public reset_hud(id) { if(active) { if(task_exists(11111+id)) remove_task(11111+id) if(task_exists(33333+id)) remove_task(33333+id) client_cmd(id, "mp3 stop") set_user_godmode(id) entity_set_edict(id, EV_ENT_owner, 33) } if(get_cvar_num("ggdm_active")==0 || SPAWNS_ENABLED == 0 || OBJECTS_ENABLED == 0) return PLUGIN_CONTINUE grabbed[id]=0 grabbing_player[id]=0 wait_denygrab[id]=false wait_denythrow[id]=false entity_set_edict(id, EV_ENT_owner, 33) if(get_cvar_num("ggdm_allweapons") == 0) set_user_godmode(id, 1) new ids[1] ids[0]=id set_task(0.1, "detect_key", 11111+id, ids, 1, "b") return PLUGIN_CONTINUE } public death_event() { if(active) { new id = read_data(2) if(task_exists(11111+id)) remove_task(11111+id) if(task_exists(33333+id)) remove_task(33333+id) if(grabbed[id]) entity_set_edict(grabbed[id], EV_ENT_owner, 33) grabbed[id]=0 grabbing_player[id]=0 wait_denygrab[id]=false wait_denythrow[id]=false client_cmd(id, "mp3 stop") } return PLUGIN_CONTINUE } public client_kill(id) { if(active) { if(task_exists(11111+id)) remove_task(11111+id) if(task_exists(33333+id)) remove_task(33333+id) if(grabbed[id]) entity_set_edict(grabbed[id], EV_ENT_owner, 33) grabbed[id]=0 grabbing_player[id]=0 wait_denygrab[id]=false wait_denythrow[id]=false client_cmd(id, "mp3 stop") } return PLUGIN_CONTINUE } public switchweapon(id) { if(get_cvar_num("ggdm_active") == 0 || SPAWNS_ENABLED == 0 || OBJECTS_ENABLED == 0) return PLUGIN_CONTINUE if(get_cvar_num("ggdm_allweapons") == 0) { client_cmd(id, "weapon_knife") entity_set_string(id, EV_SZ_viewmodel, GRAVGUN_VMODEL) entity_set_string(id, EV_SZ_weaponmodel, GRAVGUN_PMODEL) } else { new plrClip, plrAmmo, plrWeapId = get_user_weapon(id, plrClip, plrAmmo) if (plrWeapId == CSW_KNIFE) { entity_set_string(id, EV_SZ_viewmodel, GRAVGUN_VMODEL) entity_set_string(id, EV_SZ_weaponmodel, GRAVGUN_PMODEL) } else { if(grabbed[id]) { client_cmd(id, "mp3 stop") client_cmd(id, "mp3 play ^"sound\ggdm\ggdm_throw.mp3^"") if(task_exists(33333+id)) remove_task(33333+id) wait_denythrow[id]=false new Float:pVelocity[3] VelocityByAim(id,get_cvar_num("ggdm_throwforce"),pVelocity) entity_set_vector(grabbed[id],EV_VEC_velocity,pVelocity) new entity[1] entity[0]=grabbed[id] set_task(RESET_OWNER, "reset_owner", 22222+grabbed[id], entity, 1) grabbed[id]=0 } return PLUGIN_CONTINUE } } return PLUGIN_CONTINUE } public roundstart() { if(get_cvar_num("ggdm_active") == 0) { remove_objects() active=false } else { if(SPAWNS_ENABLED == 1 && OBJECTS_ENABLED == 1) { spawn_objects() set_hudmessage(255, 255, 255, -1.0, 0.67, 0, 0.01, 15.0, 0.01, 0.01, 2) show_hudmessage(0, _T("WELCOME TO GRAVITY GUN DEATHMATCH!^nPRESS +ATTACK2 BUTTON TO GRAB AN OBJECT.^nPRESS +ATTACK BUTTON TO THROW IT AT YOUR ENNEMIES AND KILL THEM.^nYou can throw an object without grabbing it if you are close to it.^nYou can also grab and throw players.")) show_hudmessage(0, _T("WELCOME TO GRAVITY GUN DEATHMATCH!^nPRESS +ATTACK2 BUTTON TO GRAB AN OBJECT.^nPRESS +ATTACK BUTTON TO THROW IT AT YOUR ENNEMIES AND KILL THEM.^nYou can throw an object without grabbing it if you are close to it.^nYou can also grab and throw players.")) active=true } else { if(SPAWNS_ENABLED == 0) console_print(0, _T("[Gravity Gun DeathMatch] OBJECTS WILL NOT SPAWN.")) if(OBJECTS_ENABLED == 0) console_print(0, _T("[Gravity Gun DeathMatch] YOU NEED TO CONFIGURE THE OBJECTS TO BE SPAWNED.")) active=false } } return PLUGIN_CONTINUE } public endround() { if(active) { set_task(4.0, "remove_objects", 99999, "", 0) } return PLUGIN_CONTINUE } spawn_objects() { for(new i = 0;i < SPAWNS; i++ ) { new randomizer = random(SPAWNS) if(randomizer != i) { new temp[3] temp[0] = SPAWN[i][0] temp[1] = SPAWN[i][1] temp[2] = SPAWN[i][2] SPAWN[i][0] = SPAWN[randomizer][0] SPAWN[i][1] = SPAWN[randomizer][1] SPAWN[i][2] = SPAWN[randomizer][2] SPAWN[randomizer][0] = temp[0] SPAWN[randomizer][1] = temp[1] SPAWN[randomizer][2] = temp[2] } } remove_objects() new objects=get_cvar_num("ggdm_objects") if(objects<1) objects=1 if(objects>80) objects=80 for(new i = 0; i < objects; i++) { new NewObject = create_entity("info_target") if(NewObject <= 0) { console_print(0, _T("[Gravity Gun DeathMatch] OBJECT GENERATION FAILED.")) return PLUGIN_HANDLED_MAIN } new Float:temporg[3] temporg[0] = float(SPAWN[i][0]) temporg[1] = float(SPAWN[i][1]) temporg[2] = float(SPAWN[i][2] + 32) new randObject = random_num(0, g_ObjectsNum) entity_set_string(NewObject, EV_SZ_classname, "entObject") entity_set_model(NewObject, g_Model[randObject]) entity_set_origin(NewObject, temporg) entity_set_edict(NewObject, EV_ENT_owner, 33) entity_set_int(NewObject, EV_INT_iuser4, randObject) entity_set_int(NewObject, EV_INT_solid, 2) entity_set_int(NewObject, EV_INT_movetype, 10) entity_set_float(NewObject, EV_FL_gravity, 1.0) entity_set_float(NewObject, EV_FL_friction, 0.66) new Float:MinBox[3], Float:MaxBox[3] MinBox[0]=float(g_MinX[randObject]) MinBox[1]=float(g_MinY[randObject]) MinBox[2]=float(g_MinZ[randObject]) MaxBox[0]=float(g_MaxX[randObject]) MaxBox[1]=float(g_MaxY[randObject]) MaxBox[2]=float(g_MaxZ[randObject]) entity_set_size(NewObject, MinBox, MaxBox) new Float:velocity[3] velocity[0] = float(random(256)-128) velocity[1] = float(random(256)-128) velocity[2] = float(random(300)+75) entity_set_vector(NewObject, EV_VEC_velocity,velocity) } return PLUGIN_CONTINUE } public remove_objects() { new nextitem = find_entity(-1,"entObject") while(nextitem > 0) { remove_entity(nextitem) nextitem = find_entity(-1,"entObject") } return PLUGIN_CONTINUE } public entity_touch(entity1, entity2) { if(!active) return PLUGIN_CONTINUE if(entity1 > 0 && is_entity(entity1) && entity2 > 0 && is_entity(entity2)) { new itemClassName[MAX_NAME_LENGTH] new playerClassname[MAX_NAME_LENGTH] entity_get_string(entity1, EV_SZ_classname, itemClassName, MAX_NAME_LENGTH-1) entity_get_string(entity2, EV_SZ_classname, playerClassname, MAX_NAME_LENGTH-1) if(equal(itemClassName,"entObject") && equal(playerClassname,"player")) { new killer=entity_get_edict(entity1, EV_ENT_owner)-33 if(!killer || killer==entity2 || grabbed[killer]) return PLUGIN_CONTINUE if(get_cvar_num("mp_friendlyfire") == 0 && get_user_team(killer) == get_user_team(entity2)) return PLUGIN_CONTINUE set_user_godmode(entity2) emit_sound(entity2, CHAN_BODY, "player/headshot1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) set_msg_block(gMsgDeathMsg, BLOCK_SET) set_user_health(entity2, 0) set_msg_block(gMsgDeathMsg, BLOCK_NOT) log_kill(killer, entity2, g_ModelName[entity_get_int(entity1, EV_INT_iuser4)]) if(get_user_team(killer) != get_user_team(entity2)) { set_user_frags(entity2, get_user_frags(entity2) + 1) set_user_frags(killer, get_user_frags(killer) + 1) new money = get_user_money(killer) if(money < 16000) set_user_money(killer, money + 300) } else { set_user_frags(entity2, get_user_frags(entity2) + 1) set_user_frags(killer, get_user_frags(killer) - 2) new money = get_user_money(killer) if (money != 0) set_user_money(killer, money - 150) } message_begin(MSG_BROADCAST, get_user_msgid("DeathMsg"), {0,0,0}, 0) write_byte(killer) write_byte(entity2) write_byte(0) write_string(g_ModelName[entity_get_int(entity1, EV_INT_iuser4)]) message_end() entity_set_edict(entity1, EV_ENT_owner, 33) entity_set_vector(entity1, EV_VEC_velocity, Float:{0,0,0}) } } return PLUGIN_CONTINUE } public log_kill(killer, victim, weapon[]) { new kname[32], vname[32], kauthid[32], vauthid[32], kteam[10], vteam[10] get_user_name(killer, kname, 31) get_user_team(killer, kteam, 9) get_user_authid(killer, kauthid, 31) get_user_name(victim, vname, 31) get_user_team(victim, vteam, 9) get_user_authid(victim, vauthid, 31) log_message("^"%s<%d><%s><%s>^" killed ^"%s<%d><%s><%s>^" with ^"%s^"", kname, get_user_userid(killer), kauthid, kteam, vname, get_user_userid(victim), vauthid, vteam, weapon) } public extra_damage(killer, victim) { if(get_cvar_num("mp_friendlyfire") == 0 && get_user_team(killer) == get_user_team(victim)) return PLUGIN_CONTINUE new health = get_user_health(victim) - get_cvar_num("ggdm_damage") if(health > 0) { set_user_godmode(victim) set_user_health(victim, health) if(get_cvar_num("ggdm_allweapons") == 0) set_user_godmode(victim, 1) } else { set_user_godmode(victim) emit_sound(victim, CHAN_BODY, "player/headshot1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) set_msg_block(gMsgDeathMsg, BLOCK_SET) set_user_health(victim, 0) set_msg_block(gMsgDeathMsg, BLOCK_NOT) log_kill(killer, victim, "throw") if(get_user_team(killer) != get_user_team(victim)) { set_user_frags(victim, get_user_frags(victim) + 1) set_user_frags(killer, get_user_frags(killer) + 1) new money = get_user_money(killer) if(money < 16000) set_user_money(killer, money + 300) } else { set_user_frags(victim, get_user_frags(victim) + 1) set_user_frags(killer, get_user_frags(killer) - 2) new money = get_user_money(killer) if (money != 0) set_user_money(killer, money - 150) } message_begin(MSG_BROADCAST, get_user_msgid("DeathMsg"), {0,0,0}, 0) write_byte(killer) write_byte(victim) write_byte(0) write_string("throw") message_end() } return PLUGIN_CONTINUE } public detect_key(player[]) { new id=player[0] new plrClip, plrAmmo, plrWeapId = get_user_weapon(id, plrClip, plrAmmo) if (plrWeapId != CSW_KNIFE) return PLUGIN_CONTINUE new button = entity_get_int(id, EV_INT_button) if(grabbed[id]) { if(button & KEY_THROW) { client_cmd(id, "mp3 stop") client_cmd(id, "mp3 play ^"sound\ggdm\ggdm_throw.mp3^"") if(task_exists(33333+id)) remove_task(33333+id) wait_denythrow[id]=true new ids[1] ids[0]=id set_task(1.5, "reset_denythrow", 55555+id, ids, 1) new Float:pVelocity[3] VelocityByAim(id,get_cvar_num("ggdm_throwforce"),pVelocity) entity_set_vector(grabbed[id],EV_VEC_velocity,pVelocity) new entity[1] entity[0]=grabbed[id] set_task(RESET_OWNER, "reset_owner", 22222+grabbed[id], entity, 1) if(grabbed[id] > 0 && grabbed[id] < 33) extra_damage(id, grabbed[id]) grabbed[id]=0 return PLUGIN_CONTINUE } new origin[3], look[3], direction[3], moveto[3], Float:grabbedorigin[3], Float:velocity[3], length get_user_origin(id, origin, 1) get_user_origin(id, look, 3) entity_get_vector(grabbed[id], EV_VEC_origin, grabbedorigin) direction[0]=look[0]-origin[0] direction[1]=look[1]-origin[1] direction[2]=look[2]-origin[2] length = get_distance(look,origin) if (!length) length=1 // avoid division by 0 moveto[0]=origin[0]+direction[0]*grablength[id]/length moveto[1]=origin[1]+direction[1]*grablength[id]/length moveto[2]=origin[2]+direction[2]*grablength[id]/length velocity[0]=(moveto[0]-grabbedorigin[0])*velocity_multiplier velocity[1]=(moveto[1]-grabbedorigin[1])*velocity_multiplier velocity[2]=(moveto[2]-grabbedorigin[2])*velocity_multiplier entity_set_vector(grabbed[id], EV_VEC_velocity, velocity) } else { if(button & KEY_GRAB) { new targetid, body get_user_aiming(id, targetid, body) if (targetid) { new itemClassName[MAX_NAME_LENGTH] entity_get_string(targetid, EV_SZ_classname, itemClassName, MAX_NAME_LENGTH-1) if(equal(itemClassName,"entObject") || equal(itemClassName,"player")) { new owner=entity_get_edict(targetid, EV_ENT_owner)-33 if(owner>0 && grabbed[owner]==targetid) return PLUGIN_CONTINUE if(equal(itemClassName,"player")) { if(grabbing_player[targetid]==id || grabbed[targetid]==id) return PLUGIN_CONTINUE } new origin1[3], origin2[3], Float:forigin2[3] get_user_origin(id, origin1) entity_get_vector(targetid, EV_VEC_origin, forigin2) FVecIVec(forigin2, origin2) new length = get_distance(origin1,origin2) if(length < get_cvar_num("ggdm_maxdist_grab")) { if(length < get_cvar_num("ggdm_maxdist")) { set_grabbed(id, targetid) } else { new origin[3], look[3], direction[3], moveto[3], Float:grabbedorigin[3], Float:velocity[3] get_user_origin(id, origin, 1) get_user_origin(id, look, 3) entity_get_vector(targetid, EV_VEC_origin, grabbedorigin) direction[0]=look[0]-origin[0] direction[1]=look[1]-origin[1] length = get_distance(look,origin) if (!length) length=1 // avoid division by 0 grablength[id] = length - GRAB_SPEED velocity_multiplier = get_cvar_num("ggdm_grabforce") moveto[0]=origin[0]+direction[0]*grablength[id]/length moveto[1]=origin[1]+direction[1]*grablength[id]/length velocity[0]=(moveto[0]-grabbedorigin[0])*velocity_multiplier velocity[1]=(moveto[1]-grabbedorigin[1])*velocity_multiplier velocity[2]=4.0 entity_set_vector(targetid, EV_VEC_velocity, velocity) } } } } else if(!wait_denygrab[id]) { //client_cmd(id, "mp3 stop") client_cmd(id, "mp3 play ^"sound\ggdm\ggdm_denygrab.mp3^"") wait_denygrab[id]=true new ids[1] ids[0]=id set_task(1.4, "reset_denygrab", 44444+id, ids, 1) } return PLUGIN_CONTINUE } else { grabbing_player[id]=0 } if(button & KEY_THROW) { new targetid, body get_user_aiming(id, targetid, body) if (targetid) { new itemClassName[MAX_NAME_LENGTH] entity_get_string(targetid, EV_SZ_classname, itemClassName, MAX_NAME_LENGTH-1) if(equal(itemClassName,"entObject") || equal(itemClassName,"player")) { new owner=entity_get_edict(targetid, EV_ENT_owner)-33 if(owner>0 && grabbed[owner]==targetid) return PLUGIN_CONTINUE if(equal(itemClassName,"player")) { if(grabbing_player[targetid]==id || grabbed[targetid]==id) return PLUGIN_CONTINUE } new origin1[3], origin2[3], Float:forigin2[3] get_user_origin(id, origin1) entity_get_vector(targetid, EV_VEC_origin, forigin2) FVecIVec(forigin2, origin2) new length = get_distance(origin1,origin2) if(length < get_cvar_num("ggdm_maxdist")) { client_cmd(id, "mp3 stop") client_cmd(id, "mp3 play ^"sound\ggdm\ggdm_throw.mp3^"") wait_denythrow[id]=true new ids[1] ids[0]=id set_task(1.4, "reset_denythrow", 55555+id, ids, 1) new Float:pVelocity[3] VelocityByAim(id,get_cvar_num("ggdm_throwforce"),pVelocity) entity_set_vector(targetid,EV_VEC_velocity,pVelocity) entity_set_edict(targetid, EV_ENT_owner, id+33) new entity[1] entity[0]=targetid if(task_exists(22222+targetid)) remove_task(22222+targetid) set_task(RESET_OWNER, "reset_owner", 22222+targetid, entity, 1) if(targetid > 0 && targetid < 33) extra_damage(id, targetid) } } } else if(!wait_denythrow[id]) { //client_cmd(id, "mp3 stop") client_cmd(id, "mp3 play ^"sound\ggdm\ggdm_denythrow.mp3^"") wait_denythrow[id]=true new ids[1] ids[0]=id set_task(1.0, "reset_denythrow", 55555+id, ids, 1) } return PLUGIN_CONTINUE } } return PLUGIN_CONTINUE } public set_grabbed(id, targetid) { //client_cmd(id, "mp3 stop") client_cmd(id, "mp3 play ^"sound\ggdm\ggdm_grab.mp3^"") if(task_exists(22222+targetid)) remove_task(22222+targetid) grabbed[id]=targetid grablength[id]=80 entity_set_edict(targetid, EV_ENT_owner, id+33) new ids[1] ids[0]=id set_task(2.0, "loop_grabbing_sound", 33333+id, ids, 1) } public loop_grabbing_sound(ids[]) { client_cmd(ids[0], "mp3 loop ^"sound\ggdm\ggdm_grabbing.mp3^"") } public reset_denythrow(ids[]) { wait_denythrow[ids[0]]=false } public reset_denygrab(ids[]) { wait_denygrab[ids[0]]=false } public reset_owner(entity[]) { entity_set_edict(entity[0], EV_ENT_owner, 33) } public createSpawns() //taken from Bail's Root Plugin { SPAWNS = 0 new ctbase_id new tbase_id new Float:base_origin_temp[3] new Float:ctbase_origin[3] = {0.0,...} new Float:tbase_origin[3] = {0.0,...} new Float:pspawncounter pspawncounter = 0.0 ctbase_id = find_entity(-1,"info_player_start") while (ctbase_id > 0) { pspawncounter +=1.0 entity_get_vector (ctbase_id,EV_VEC_origin,base_origin_temp) ctbase_origin[0] += base_origin_temp[0] ctbase_origin[1] += base_origin_temp[1] ctbase_origin[2] += base_origin_temp[2] ctbase_id = find_entity(ctbase_id,"info_player_start") } ctbase_origin[0] = ctbase_origin[0] / pspawncounter ctbase_origin[1] = ctbase_origin[1] / pspawncounter ctbase_origin[2] = ctbase_origin[2] / pspawncounter pspawncounter = 0.0 tbase_id = find_entity(-1,"info_player_deathmatch") while (tbase_id > 0) { pspawncounter +=1.0 entity_get_vector (tbase_id,EV_VEC_origin,base_origin_temp) tbase_origin[0] += base_origin_temp[0] tbase_origin[1] += base_origin_temp[1] tbase_origin[2] += base_origin_temp[2] tbase_id = find_entity(tbase_id,"info_player_deathmatch") } tbase_origin[0] = tbase_origin[0] / pspawncounter tbase_origin[1] = tbase_origin[1] / pspawncounter tbase_origin[2] = tbase_origin[2] / pspawncounter new Float:ia[3] new Float:square_o1[3] new Float:square_o2[3] if(tbase_origin[0]>ctbase_origin[0]) { square_o1[0] = tbase_origin[0]+BEHINDBASESIZE square_o2[0] = ctbase_origin[0]-BEHINDBASESIZE } else { square_o1[0] = ctbase_origin[0]+BEHINDBASESIZE square_o2[0] = tbase_origin[0]-BEHINDBASESIZE } if(tbase_origin[1]>ctbase_origin[1]) { square_o1[1] = tbase_origin[1]+BEHINDBASESIZE square_o2[1] = ctbase_origin[1]-BEHINDBASESIZE } else { square_o1[1] = ctbase_origin[1]+BEHINDBASESIZE square_o2[1] = tbase_origin[1]-BEHINDBASESIZE } if(tbase_origin[2]>ctbase_origin[2]) { square_o1[2] = tbase_origin[2]+1000 square_o2[2] = ctbase_origin[2]-1000 } else { square_o1[2] = ctbase_origin[2]+1000 square_o2[2] = tbase_origin[2]-1000 } new bool:xyused[11][11] new Float:xadd = (square_o1[0]-square_o2[0]) / 9.0 new Float:yadd = (square_o1[1]-square_o2[1]) / 9.0 new Float:zadd = (square_o1[2]-square_o2[2]) / 9.0 new bool:baseswitcher = true new countery = 0 for(ia[1]=square_o2[1];ia[1] <=square_o1[1] && SPAWNS<MAX_SPAWNS;ia[1]+=yadd) { new counterx = 0 countery++ for(ia[0]=square_o2[0];ia[0] <=square_o1[0] && SPAWNS<MAX_SPAWNS;ia[0]+=xadd) { counterx++ if(baseswitcher) { ia[2] = ctbase_origin[2]+16.0 baseswitcher = false } else { ia[2] = tbase_origin[2]+16.0 baseswitcher = true } ia[0] = float(floatround(ia[0]) + random(130)-65) ia[1] = float(floatround(ia[1]) + random(130)-65) ia[2] = float(floatround(ia[2])) if( PointContents(ia) == CONTENTS_EMPTY && !xyused[counterx][countery]) { xyused[counterx][countery] = true SPAWNS++ SPAWN[SPAWNS][0] = floatround(ia[0]) SPAWN[SPAWNS][1] = floatround(ia[1]) SPAWN[SPAWNS][2] = floatround(ia[2]) } } } for(ia[2]=(ctbase_origin[2] + tbase_origin[2] ) /2.0;ia[2] <=square_o1[2] && SPAWNS<MAX_SPAWNS;ia[2]+=zadd) { countery = 0 for(ia[1]=square_o2[1];ia[1] <=square_o1[1] && SPAWNS<MAX_SPAWNS;ia[1]+=yadd) { new counterx = 0 countery++ for(ia[0]=square_o2[0];ia[0] <=square_o1[0] && SPAWNS<MAX_SPAWNS;ia[0]+=xadd) { counterx++ ia[0] = float(floatround(ia[0]) + random(130)-65) ia[1] = float(floatround(ia[1]) + random(130)-65) ia[2] = float(floatround(ia[2])) if( PointContents(ia) == CONTENTS_EMPTY && !xyused[counterx][countery]) { xyused[counterx][countery] = true SPAWNS++ SPAWN[SPAWNS][0] = floatround(ia[0]) SPAWN[SPAWNS][1] = floatround(ia[1]) SPAWN[SPAWNS][2] = floatround(ia[2]) } } } } for(ia[2]=(ctbase_origin[2] + tbase_origin[2] ) /2.0;ia[2] >=square_o2[1] && SPAWNS<MAX_SPAWNS;ia[2]-=zadd) { countery = 0 for(ia[1]=square_o2[1];ia[1] <=square_o1[1] && SPAWNS<MAX_SPAWNS;ia[1]+=yadd) { new counterx = 0 countery++ for(ia[0]=square_o2[0];ia[0] <=square_o1[0] && SPAWNS<MAX_SPAWNS;ia[0]+=xadd) { counterx++ ia[0] = float(floatround(ia[0]) + random(130)-65) ia[1] = float(floatround(ia[1]) + random(130)-65) ia[2] = float(floatround(ia[2])) if( PointContents(ia) == CONTENTS_EMPTY && !xyused[counterx][countery]) { xyused[counterx][countery] = true SPAWNS++ SPAWN[SPAWNS][0] = floatround(ia[0]) SPAWN[SPAWNS][1] = floatround(ia[1]) SPAWN[SPAWNS][2] = floatround(ia[2]) } } } } if(SPAWNS > 0) SPAWNS_ENABLED = 1 else SPAWNS_ENABLED = 0 return PLUGIN_CONTINUE } public plugin_precache() { g_ObjectsNum = 0 new ggdm_config[64] get_basedir(ggdm_config, 63) format(ggdm_config, 63, "%s/config/ggdm_objects.cfg", ggdm_config) if(file_exists(ggdm_config)) { new text[256], Xmin[12], Ymin[12], Zmin[12], Xmax[12], Ymax[12], Zmax[12] new len, pos=0 while(g_ObjectsNum < MAX_SPAWNS && read_file(ggdm_config,pos++,text,255,len)) { if(text[0] == ';') continue if(parse(text, g_Model[g_ObjectsNum], 63, g_ModelName[g_ObjectsNum], 31, Xmin, 11, Ymin, 11, Zmin, 11, Xmax, 11, Ymax, 11, Zmax, 11) < 8 ) continue g_MinX[g_ObjectsNum]=strtonum(Xmin) g_MinY[g_ObjectsNum]=strtonum(Ymin) g_MinZ[g_ObjectsNum]=strtonum(Zmin) g_MaxX[g_ObjectsNum]=strtonum(Xmax) g_MaxY[g_ObjectsNum]=strtonum(Ymax) g_MaxZ[g_ObjectsNum]=strtonum(Zmax) format(g_Model[g_ObjectsNum], 63, "%s", g_Model[g_ObjectsNum]) precache_model(g_Model[g_ObjectsNum]) ++g_ObjectsNum } } if(g_ObjectsNum > 0) OBJECTS_ENABLED = 1 else OBJECTS_ENABLED = 0 precache_model(GRAVGUN_VMODEL) precache_model(GRAVGUN_PMODEL) precache_sound("player/headshot1.wav") precache_sound("ggdm/ggdm_throw.mp3") precache_sound("ggdm/ggdm_grab.mp3") precache_sound("ggdm/ggdm_grabbing.mp3") precache_sound("ggdm/ggdm_denythrow.mp3") precache_sound("ggdm/ggdm_denygrab.mp3") } Przeczytaj cały wpis Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi