Raised This Month: $ Target: $400
 0% 

Gore plugin bug


  
 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
Author Message
Sputnik53
Senior Member
Join Date: Jun 2005
Old 10-08-2007 , 10:02   Gore plugin bug
Reply With Quote #1

Code:
/* *   AMXMOD script. *   (plugin_gore.sma) *   by mike_cao <[email protected]> *   This file is provided as is (no warranties). * *   This plugin adds gore effects. It is configured *   with the cvar "amx_gore" using these flags: * *   a - Headshot blood *   b - Extra blood effects *   c - Bleeding on low health *   d - Gib explosion (knife, HE, high damage only) * */ #include <amxmodx> #include <fun> #define MAX_NAME_LENGTH 32 #define MAX_VAR_LENGTH 64 #define MAX_PLAYERS 32 #define MAX_TEXT_LENGTH 512 #define GORE_HEADSHOT       (1<<0) // "a" #define GORE_BLOOD          (1<<1) // "b" #define GORE_BLEEDING       (1<<2) // "c" #define GORE_GIB            (1<<3) // "d" #define TE_BLOODSPRITE      115 #define TE_BLOODSTREAM      101 #define TE_MODEL            106 #define TE_WORLDDECAL       116 /************************************************************ * MAIN ************************************************************/ new gHealthIndex[MAX_PLAYERS+1] new mod_name[32] new blood_small[7] new blood_large[2] new mdl_gib_flesh new mdl_gib_head new mdl_gib_legbone new mdl_gib_lung new mdl_gib_meat new mdl_gib_spine new spr_blood_drop new spr_blood_spray public event_damage() {     new iFlags = get_gore_flags()     new iVictim = read_data(0)     gHealthIndex[iVictim] = get_user_health(iVictim)         if (iFlags&GORE_BLOOD) {         new iOrigin[3]         get_user_origin(iVictim,iOrigin)         fx_blood(iOrigin)         fx_blood_small(iOrigin,10)     }     return PLUGIN_CONTINUE } public event_death() {     new iFlags = get_gore_flags()     new iOrigin[3]     new sWeapon[MAX_NAME_LENGTH]     new iVictim = read_data(2)     new iHeadshot = read_data(3)         read_data(4,sWeapon,MAX_NAME_LENGTH-1)         if (iFlags&GORE_HEADSHOT && iHeadshot) {         get_user_origin(iVictim,iOrigin)         fx_headshot(iOrigin)     }     //else if (iFlags&GORE_GIB && (equal(sWeapon,"knife") || equal(sWeapon,"grenade") || (gHealthIndex[iVictim] - get_user_health(iVictim)) > 100)) {     else if (iFlags&GORE_GIB && equal(sWeapon,"grenade")) {         get_user_origin(iVictim,iOrigin)         // Effects         fx_trans(iVictim,0)         fx_gib_explode(iOrigin,5)         fx_blood_large(iOrigin,3)         fx_blood_small(iOrigin,20)         // Hide body         iOrigin[2] = iOrigin[2]-20         set_user_origin(iVictim,iOrigin)     } } public event_blood() {     new iFlags = get_gore_flags()     if (iFlags&GORE_BLEEDING) {         new iPlayer, iPlayers[MAX_PLAYERS], iNumPlayers, iOrigin[3]         get_players(iPlayers,iNumPlayers,"a")         for (new i = 0; i < iNumPlayers; i++) {             iPlayer = iPlayers[i]             if (get_user_health(iPlayer) < 20) {                 get_user_origin(iPlayer,iOrigin)                 fx_bleed(iOrigin)                 fx_blood_small(iOrigin,5)             }         }     } } public event_respawn(id) {     gHealthIndex[id] = get_user_health(id)     return PLUGIN_CONTINUE } public get_gore_flags() {     new sFlags[24]     get_cvar_string("amx_gore",sFlags,24)     return read_flags(sFlags) } /************************************************************ * FX FUNCTIONS ************************************************************/ static fx_trans(player,amount) {     set_user_rendering(player,kRenderFxNone,0,0,0,kRenderTransAlpha,amount)     return PLUGIN_CONTINUE } public fx_blood(origin[3]) {         message_begin(MSG_BROADCAST,SVC_TEMPENTITY)         write_byte(TE_BLOODSPRITE)         write_coord(origin[0]+random_num(-20,20))         write_coord(origin[1]+random_num(-20,20))         write_coord(origin[2]+random_num(-20,20))         write_short(spr_blood_spray)         write_short(spr_blood_drop)         write_byte(248) // color index         write_byte(10) // size         message_end() } public fx_bleed(origin[3]) {     // Blood spray     message_begin(MSG_BROADCAST,SVC_TEMPENTITY)     write_byte(TE_BLOODSTREAM)     write_coord(origin[0])     write_coord(origin[1])     write_coord(origin[2]+10)     write_coord(random_num(-100,100)) // x     write_coord(random_num(-100,100)) // y     write_coord(random_num(-10,10)) // z     write_byte(70) // color     write_byte(random_num(50,100)) // speed     message_end() } static fx_blood_small(origin[3],num) {     // Blood decals     if(equal(mod_name,"cstrike"))         blood_small = {190,191,192,193,194,195,197}     else         blood_small = {202,203,204,205,207,208,209}         // Small splash     for (new j = 0; j < num; j++) {         message_begin(MSG_BROADCAST,SVC_TEMPENTITY)         write_byte(TE_WORLDDECAL)         write_coord(origin[0]+random_num(-100,100))         write_coord(origin[1]+random_num(-100,100))         write_coord(origin[2]-36)         write_byte(blood_small[random_num(0,6)]) // index         message_end()     } } static fx_blood_large(origin[3],num) {     // Blood decals     if(equali(mod_name,"cstrike"))         blood_large = {204,205}     else         blood_large = {216,217}     // Large splash     for (new i = 0; i < num; i++) {         message_begin(MSG_BROADCAST,SVC_TEMPENTITY)         write_byte(TE_WORLDDECAL)         write_coord(origin[0]+random_num(-50,50))         write_coord(origin[1]+random_num(-50,50))         write_coord(origin[2]-36)         write_byte(blood_large[random_num(0,1)]) // index         message_end()     } } static fx_gib_explode(origin[3],num) {     new flesh[3], x, y, z     flesh[0] = mdl_gib_flesh     flesh[1] = mdl_gib_meat     flesh[2] = mdl_gib_legbone     // Gib explosion     // Head     message_begin(MSG_BROADCAST,SVC_TEMPENTITY)     write_byte(TE_MODEL)     write_coord(origin[0])     write_coord(origin[1])     write_coord(origin[2])     write_coord(random_num(-100,100))     write_coord(random_num(-100,100))     write_coord(random_num(100,200))     write_angle(random_num(0,360))     write_short(mdl_gib_head)     write_byte(0) // bounce     write_byte(500) // life     message_end()         // Spine     message_begin(MSG_BROADCAST,SVC_TEMPENTITY)     write_byte(TE_MODEL)     write_coord(origin[0])     write_coord(origin[1])     write_coord(origin[2])     write_coord(random_num(-100,100))     write_coord(random_num(-100,100))     write_coord(random_num(100,200))     write_angle(random_num(0,360))     write_short(mdl_gib_spine)     write_byte(0) // bounce     write_byte(500) // life     message_end()         // Lung     for(new i = 0; i < random_num(1,2); i++) {         message_begin(MSG_BROADCAST,SVC_TEMPENTITY)         write_byte(TE_MODEL)         write_coord(origin[0])         write_coord(origin[1])         write_coord(origin[2])         write_coord(random_num(-100,100))         write_coord(random_num(-100,100))         write_coord(random_num(100,200))         write_angle(random_num(0,360))         write_short(mdl_gib_lung)         write_byte(0) // bounce         write_byte(500) // life         message_end()     }         // Parts, 5 times     for(new i = 0; i < 5; i++) {         message_begin(MSG_BROADCAST,SVC_TEMPENTITY)         write_byte(TE_MODEL)         write_coord(origin[0])         write_coord(origin[1])         write_coord(origin[2])         write_coord(random_num(-100,100))         write_coord(random_num(-100,100))         write_coord(random_num(100,200))         write_angle(random_num(0,360))         write_short(flesh[random_num(0,2)])         write_byte(0) // bounce         write_byte(500) // life         message_end()     }         // Blood     for(new i = 0; i < num; i++) {         x = random_num(-100,100)         y = random_num(-100,100)         z = random_num(0,100)         for(new j = 0; j < 5; j++) {             message_begin(MSG_BROADCAST,SVC_TEMPENTITY)             write_byte(TE_BLOODSPRITE)             write_coord(origin[0]+(x*j))             write_coord(origin[1]+(y*j))             write_coord(origin[2]+(z*j))             write_short(spr_blood_spray)             write_short(spr_blood_drop)             write_byte(248) // color index             write_byte(15) // size             message_end()         }     } } public fx_headshot(origin[3]) {     // Blood spray, 5 times     for (new i = 0; i < 5; i++) {         message_begin(MSG_BROADCAST,SVC_TEMPENTITY)         write_byte(101)         write_coord(origin[0])         write_coord(origin[1])         write_coord(origin[2]+30)         write_coord(random_num(-20,20)) // x         write_coord(random_num(-20,20)) // y         write_coord(random_num(50,300)) // z         write_byte(70) // color         write_byte(random_num(100,200)) // speed         message_end()     } } /************************************************************ * PLUGIN FUNCTIONS ************************************************************/ public plugin_precache() {     spr_blood_drop = precache_model("sprites/blood.spr")     spr_blood_spray = precache_model("sprites/bloodspray.spr")     mdl_gib_flesh = precache_model("models/Fleshgibs.mdl")     mdl_gib_head = precache_model("models/GIB_Skull.mdl")     mdl_gib_legbone = precache_model("models/GIB_Legbone.mdl")     mdl_gib_lung = precache_model("models/GIB_Lung.mdl")     mdl_gib_meat = precache_model("models/GIB_B_Gib.mdl")     mdl_gib_spine = precache_model("models/GIB_B_Bone.mdl") } public plugin_init() {     register_plugin("Plugin Gore","1.0","mike_cao")     register_event("DeathMsg","event_death","a")     register_event("Damage","event_damage","b","2!0","3=0","4!0")     register_event("ResetHUD","event_respawn","be","1=1")     register_cvar("amx_gore","ad")     set_task(1.0,"event_blood",0,"",0,"b")     get_modname(mod_name,31)         if( !( (equali(mod_name,"cstrike")) || (equali(mod_name,"czero")) ) )         pause("ae")     return PLUGIN_CONTINUE }
It's the original gore plugin and I modified it a bit (only grenades make the gibbing gore effect, see event_death) but it has a strange bug, that if more than 1 players die from the grenade, it doesn't do the gore effect on neither of them (the bodies just disappear, no gore effect).

Last edited by Sputnik53; 10-08-2007 at 10:38.
Sputnik53 is offline
 



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 16:02.


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