the same :/ L 02/08/2015 - 21:33:51: [AMXX] Plugin "shop.amxx" failed to load: Plugin uses an unknown function (name "cs_give_frost_nade") - check your modules.ini.
new const MODEL_FROZEN[] = "models/pi_shrub.mdl"; new const MODEL_GLASSGIBS[] = "models/glassgibs.mdl";
new const SOUND_EXPLODE[] = "x/x_shoot1.wav"; new const SOUND_FROZEN[] = "debris/glass1.wav"; new const SOUND_UNFROZEN[] = "debris/glass3.wav"; new const SOUND_CHILLED[] = "player/pl_duct2.wav"; new const SOUND_PICKUP[] = "items/gunpickup2.wav";
new const SPRITE_TRAIL[] = "sprites/laserbeam.spr"; new const SPRITE_SMOKE[] = "sprites/steam1.spr"; new const SPRITE_EXPLO[] = "sprites/shockwave.spr";
public plugin_end() { DestroyForward(fnFwdPlayerChilled); DestroyForward(fnFwdPlayerFrozen); }
public native_give_frost_nade(iPlugin, iParams) { new client = get_param(1)
if(!is_user_alive(client)) return 0
buy_frostnade(client)
return 1 }
public plugin_precache() { precache_model(MODEL_FROZEN); glassGibs = precache_model(MODEL_GLASSGIBS);
precache_sound(SOUND_EXPLODE); // grenade explodes precache_sound(SOUND_FROZEN); // player is frozen precache_sound(SOUND_UNFROZEN); // frozen wears off precache_sound(SOUND_CHILLED); // player is chilled precache_sound(SOUND_PICKUP); // player buys frostnade
public client_disconnect(id) { if(isChilled[id]) task_remove_chill(TASK_REMOVE_CHILL+id); if(isFrozen[id]) task_remove_freeze(TASK_REMOVE_FREEZE+id); }
// registering a ham hook for "player" won't register it for CZ bots, // for some reason. so we have to register it by entity. public czbot_hook_ham(id) { if(!czBotHams && is_user_connected(id) && is_user_bot(id) && get_pcvar_num(bot_quota) > 0) { RegisterHamFromEntity(Ham_Spawn,id,"ham_player_spawn",1); RegisterHamFromEntity(Ham_Killed,id,"ham_player_killed",1); RegisterHamFromEntity(Ham_Player_ResetMaxSpeed,id,"ham_player_resetmaxspeed",1); czBotHams = 1; } }
// intercept server log messages to replace grenade kills with frostgrenade kills public plugin_log() { static arg[512];
if(equal(arg, "killed")) { read_logargv(2, arg, 127); // info of player that was killed
// get ID of player that was killed new dummy[1], killedUserId; parse_loguser(arg, dummy, 0, killedUserId); new killedId = find_player("k", killedUserId);
/**************************************** * PRIMARY FUNCTIONS AND SUCH ****************************************/
public buy_frostnade(id) { if(!get_pcvar_num(pcv_enabled) || get_pcvar_num(pcv_override)) return PLUGIN_CONTINUE;
if(!is_user_alive(id)) return PLUGIN_HANDLED;
if(get_pcvar_num(pcv_buyzone) && !cs_get_user_buyzone(id)) { // #Cstrike_NotInBuyZone won't work for some reason client_print(id,print_center,"You are not in a buy zone.");
return PLUGIN_HANDLED; }
if(!(get_pcvar_num(pcv_teams) & _:cs_get_user_team(id))) { // have to do it this way to format message_begin(MSG_ONE,gmsgTextMsg,_,id); write_byte(print_center); write_string("#Alias_Not_Avail"); write_string("Frost Grenade"); message_end();
// won't play via cs_set_user_bpammo engfunc(EngFunc_EmitSound,id,CHAN_ITEM,SOUND_PICKUP,VOL_NORM,ATTN_NORM,0,PITCH_NORM);
// for icon management grenade_added(id, wpnid); }
return PLUGIN_HANDLED; }
// entity is given a model (used to detect for thrown grenades) public fw_setmodel(ent,model[]) { if(!get_pcvar_num(pcv_enabled)) return FMRES_IGNORED;
new owner = pev(ent,pev_owner); if(!is_user_connected(owner)) return FMRES_IGNORED;
// this isn't going to explode new Float:dmgtime; pev(ent,pev_dmgtime,dmgtime); if(dmgtime == 0.0) return FMRES_IGNORED;
new type, csw; if(model[7] == 'w' && model[8] == '_') { switch(model[9]) { case 'h': { type = NT_HEGRENADE; csw = CSW_HEGRENADE; } case 'f': { type = NT_FLASHBANG; csw = CSW_FLASHBANG; } case 's': { type = NT_SMOKEGRENADE; csw = CSW_SMOKEGRENADE; } } } if(!type) return FMRES_IGNORED;
new team = _:cs_get_user_team(owner);
// have a frostnade (override off) ;OR; override enabled, on valid team, using valid frostnade type if(hasFrostNade[owner] == csw || (get_pcvar_num(pcv_override) && (get_pcvar_num(pcv_teams) & team) && (get_pcvar_num(pcv_nadetypes) & type))) { // not using override if(hasFrostNade[owner] == csw) { hasFrostNade[owner] = 0; if(get_pcvar_num(pcv_icon) == ICON_HASNADE) { show_icon(owner, STATUS_HIDE); } }
set_pev(ent,pev_team,team); set_pev(ent,pev_bInDuck,1); // flag it as a frostnade
new rgb[3], Float:rgbF[3]; get_rgb_colors(team,rgb); IVecFVec(rgb, rgbF);
// freeze a player in place whilst he's frozen public fw_playerprethink(id) { /*if(isChilled[id]) { // remember rendering changes new fx = pev(id,pev_renderfx), Float:color[3], mode = pev(id,pev_rendermode), Float:amount; pev(id,pev_rendercolor,color); pev(id,pev_renderamt,amount);
// if are on the ground and about to jump, set the gravity too high to really do so if((pev(id,pev_button) & IN_JUMP) && !(pev(id,pev_oldbuttons) & IN_JUMP) && (pev(id,pev_flags) & FL_ONGROUND)) set_pev(id,pev_gravity,999999999.9);
// otherwise, set the gravity so low that they don't fall else set_pev(id,pev_gravity,0.000000001); }
return FMRES_IGNORED; }
// override grenade kill message with skull and crossbones public msg_deathmsg(msg_id,msg_dest,msg_entity) { new victim = get_msg_arg_int(2); if(!is_user_connected(victim) || !frostKilled[victim]) return PLUGIN_CONTINUE;
// movement speed is changed public ham_player_resetmaxspeed(id) { if(get_pcvar_num(pcv_enabled)) { set_user_chillfreeze_speed(id); }
return HAM_IGNORED; }
// grenade is ticking away public ham_grenade_think(ent) { // not a frostnade if(!pev_valid(ent) || !pev(ent,pev_bInDuck)) return HAM_IGNORED;
new Float:dmgtime; pev(ent,pev_dmgtime,dmgtime); if(dmgtime > get_gametime()) return HAM_IGNORED;
// and boom goes the dynamite frostnade_explode(ent);
return HAM_SUPERCEDE; }
// a player_weaponstrip is used public ham_player_weaponstrip_use(ent, idcaller, idactivator, use_type, Float:value) { if(idcaller >= 1 && idcaller <= maxPlayers) { // clear frostnade when using override hasFrostNade[idcaller] = 0;
if(is_user_alive(idcaller) && get_pcvar_num(pcv_enabled) && get_pcvar_num(pcv_icon) == ICON_HASNADE) { new status = player_has_frostnade(idcaller); show_icon(idcaller, status); } }
return HAM_IGNORED; }
// some kind of grenade is deployed public ham_grenade_deploy(ent) { if(pev_valid(ent)) { grenade_deployed(get_pdata_cbase(ent, m_pPlayer, 4), get_pdata_int(ent, OFFSET_WEAPON_CSWID, 4)); }
return HAM_IGNORED; }
// some kind of grenade is holstered public ham_grenade_holster(ent) { if(pev_valid(ent)) { grenade_holstered(get_pdata_cbase(ent, m_pPlayer, 4), get_pdata_int(ent, OFFSET_WEAPON_CSWID, 4)); }
return HAM_IGNORED; }
// some kind of grenade is added to a player's inventory public ham_grenade_addtoplayer(ent, id) { if(pev_valid(ent)) { grenade_added(id, get_pdata_int(ent, OFFSET_WEAPON_CSWID, 4)); }
return HAM_IGNORED; }
// some kind of grenade is added to a player's inventory, when he already has one public ham_grenade_addduplicate(ent, orig) { if(pev_valid(orig)) { grenade_added(pev(orig, pev_owner), get_pdata_int(orig, OFFSET_WEAPON_CSWID, 4)); }
return HAM_IGNORED; }
// handle when player id deploys a grenade with weapon id wid grenade_deployed(id, wid) { // if we should worry about managing my icon now if(get_pcvar_num(pcv_enabled) && is_user_alive(id) && get_pcvar_num(pcv_icon) == ICON_HASNADE) { // if I just switched to a frost grenade if( wid == hasFrostNade[id] || (get_pcvar_num(pcv_override) && (get_pcvar_num(pcv_teams) & _:cs_get_user_team(id)) && is_wid_in_nadetypes(wid)) ) { show_icon(id, STATUS_FLASH); } } }
// handle when player id holsters a grenade with weapon id wid grenade_holstered(id, wid) { // if we should worry about managing my icon now if(get_pcvar_num(pcv_enabled) && is_user_alive(id) && get_pcvar_num(pcv_icon) == ICON_HASNADE) { // if I just holstered a frost grenade if( wid == hasFrostNade[id] || (get_pcvar_num(pcv_override) && (get_pcvar_num(pcv_teams) & _:cs_get_user_team(id)) && is_wid_in_nadetypes(wid)) ) { // only do STATUS_SHOW or STATUS_HIDE... during holster, current weapon // will still technically be the frost grenade, but we don't want to // mistakenly flash the icon new status = (player_has_frostnade(id) != STATUS_HIDE ? STATUS_SHOW : STATUS_HIDE); show_icon(id, status); } } }
// handle when player id gets a grenade with weapon id wid added to his inventory grenade_added(id, wid) { // if we should worry about managing my icon now if(get_pcvar_num(pcv_enabled) && is_user_alive(id) && get_pcvar_num(pcv_icon) == ICON_HASNADE) { // if I just got a frost grenade if( wid == hasFrostNade[id] || (get_pcvar_num(pcv_override) && (get_pcvar_num(pcv_teams) & _:cs_get_user_team(id)) && is_wid_in_nadetypes(wid)) ) { new status = player_has_frostnade(id); show_icon(id, status); } } }
// a frost grenade explodes public frostnade_explode(ent) { new nadeTeam = pev(ent,pev_team), owner = pev(ent,pev_owner), Float:nadeOrigin[3]; pev(ent,pev_origin,nadeOrigin);
// make the smoke message_begin_fl(MSG_PVS,SVC_TEMPENTITY,nadeOrigin,0); write_byte(TE_SMOKE); write_coord_fl(nadeOrigin[0]); // x write_coord_fl(nadeOrigin[1]); // y write_coord_fl(nadeOrigin[2]); // z write_short(smokeSpr); // sprite write_byte(random_num(30,40)); // scale write_byte(5); // framerate message_end();
new ta, Float:targetOrigin[3], Float:distance, tr = create_tr2(), Float:fraction, Float:damage, gotFrozen = 0; for(new target=1;target<=maxPlayers;target++) { // dead, invincible, or self attack that is not allowed if(!is_user_alive(target) || pev(target,pev_takedamage) == DAMAGE_NO || (pev(target,pev_flags) & FL_GODMODE) ||(target == owner && !hitself)) continue;
// this is a team attack with ff disabled, excluding self attack ta = (_:cs_get_user_team(target) == nadeTeam); if(ta && !ff && target != owner) continue;
public task_remove_freeze(taskid) { new id = taskid-TASK_REMOVE_FREEZE;
if(pev_valid(novaDisplay[id])) { new Float:origin[3]; pev(novaDisplay[id],pev_origin,origin);
// add some tracers message_begin_fl(MSG_PVS,SVC_TEMPENTITY,origin,0); write_byte(TE_IMPLOSION); write_coord_fl(origin[0]); // x write_coord_fl(origin[1]); // y write_coord_fl(origin[2] + 8.0); // z write_byte(64); // radius write_byte(10); // count write_byte(3); // duration message_end();
// add some sparks message_begin_fl(MSG_PVS,SVC_TEMPENTITY,origin,0); write_byte(TE_SPARKS); write_coord_fl(origin[0]); // x write_coord_fl(origin[1]); // y write_coord_fl(origin[2]); // z message_end();
// add the shatter message_begin_fl(MSG_PAS,SVC_TEMPENTITY,origin,0); write_byte(TE_BREAKMODEL); write_coord_fl(origin[0]); // x write_coord_fl(origin[1]); // y write_coord_fl(origin[2] + 24.0); // z write_coord_fl(16.0); // size x write_coord_fl(16.0); // size y write_coord_fl(16.0); // size z write_coord(random_num(-50,50)); // velocity x write_coord(random_num(-50,50)); // velocity y write_coord_fl(25.0); // velocity z write_byte(10); // random velocity write_short(glassGibs); // model write_byte(10); // count write_byte(25); // life write_byte(BREAK_GLASS); // flags message_end();
// I decided to let the frostnade tint override a flashbang, // because if you are frozen, then you have much bigger problems.
// add a blue tint to their screen message_begin(MSG_ONE,gmsgScreenFade,_,id); write_short(floatround(4096.0 * duration)); // duration write_short(floatround(3072.0 * duration)); // hold time (4096.0 * 0.75) write_short(FFADE_IN); // flags write_byte(rgb[0]); // red write_byte(rgb[1]); // green write_byte(rgb[2]); // blue write_byte(100); // alpha message_end();
// check if prethink is still being used, if not, unhook it unregister_prethink() { if(fmFwdPPT) { new i; for(i=1;i<=maxPlayers;i++) if(/*isChilled[i] ||*/ isFrozen[i]) break; if(i > maxPlayers) { unregister_forward(FM_PlayerPreThink,fmFwdPPT,0); fmFwdPPT = 0; } } }
// make the explosion effects create_blast(team,Float:origin[3]) { new rgb[3]; get_rgb_colors(team,rgb);
// smallest ring message_begin_fl(MSG_PVS,SVC_TEMPENTITY,origin,0); write_byte(TE_BEAMCYLINDER); write_coord_fl(origin[0]); // x write_coord_fl(origin[1]); // y write_coord_fl(origin[2]); // z write_coord_fl(origin[0]); // x axis write_coord_fl(origin[1]); // y axis write_coord_fl(origin[2] + 385.0); // z axis write_short(exploSpr); // sprite write_byte(0); // start frame write_byte(0); // framerate write_byte(4); // life write_byte(60); // width write_byte(0); // noise write_byte(rgb[0]); // red write_byte(rgb[1]); // green write_byte(rgb[2]); // blue write_byte(100); // brightness write_byte(0); // speed message_end();
// medium ring message_begin_fl(MSG_PVS,SVC_TEMPENTITY,origin,0); write_byte(TE_BEAMCYLINDER); write_coord_fl(origin[0]); // x write_coord_fl(origin[1]); // y write_coord_fl(origin[2]); // z write_coord_fl(origin[0]); // x axis write_coord_fl(origin[1]); // y axis write_coord_fl(origin[2] + 470.0); // z axis write_short(exploSpr); // sprite write_byte(0); // start frame write_byte(0); // framerate write_byte(4); // life write_byte(60); // width write_byte(0); // noise write_byte(rgb[0]); // red write_byte(rgb[1]); // green write_byte(rgb[2]); // blue write_byte(100); // brightness write_byte(0); // speed message_end();
// largest ring message_begin_fl(MSG_PVS,SVC_TEMPENTITY,origin,0); write_byte(TE_BEAMCYLINDER); write_coord_fl(origin[0]); // x write_coord_fl(origin[1]); // y write_coord_fl(origin[2]); // z write_coord_fl(origin[0]); // x axis write_coord_fl(origin[1]); // y axis write_coord_fl(origin[2] + 555.0); // z axis write_short(exploSpr); // sprite write_byte(0); // start frame write_byte(0); // framerate write_byte(4); // life write_byte(60); // width write_byte(0); // noise write_byte(rgb[0]); // red write_byte(rgb[1]); // green write_byte(rgb[2]); // blue write_byte(100); // brightness write_byte(0); // speed message_end();
// light effect message_begin_fl(MSG_PAS,SVC_TEMPENTITY,origin,0); write_byte(TE_DLIGHT); write_coord_fl(origin[0]); // x write_coord_fl(origin[1]); // y write_coord_fl(origin[2]); // z write_byte(floatround(FROST_RADIUS/5.0)); // radius write_byte(rgb[0]); // r write_byte(rgb[1]); // g write_byte(rgb[2]); // b write_byte(8); // life write_byte(60); // decay rate message_end(); }
// give an entity a beam trail set_beamfollow(ent,life,width,rgb[3],brightness) { clear_beamfollow(ent);
message_begin(MSG_BROADCAST,SVC_TEMPENTITY); write_byte(TE_BEAMFOLLOW); write_short(ent); // entity write_short(trailSpr); // sprite write_byte(life); // life write_byte(width); // width write_byte(rgb[0]); // red write_byte(rgb[1]); // green write_byte(rgb[2]); // blue write_byte(brightness); // brightness message_end(); }
// removes beam trails from an entity clear_beamfollow(ent) { message_begin(MSG_BROADCAST,SVC_TEMPENTITY); write_byte(TE_KILLBEAM); write_short(ent); // entity message_end(); }
// gets the appropriate color and displays the frostnade icon to the player with the given status show_icon(id, status) { static rgb[3]; if(status) get_rgb_colors(_:cs_get_user_team(id), rgb); // only get colors if we need to
message_begin(MSG_ONE,gmsgStatusIcon,_,id); write_byte(status); // status (0=hide, 1=show, 2=flash) write_string("dmg_cold"); // sprite name write_byte(rgb[0]); // red write_byte(rgb[1]); // green write_byte(rgb[2]); // blue message_end(); }
// checks if a weapon id is included in fn_nadetypes is_wid_in_nadetypes(wid) { new types = get_pcvar_num(pcv_nadetypes);
// checks if a player has a frostnade, taking into account fn_override and such. // returns: STATUS_HIDE = no frostnade, STATUS_SHOW = has frostnade but not deployed, STATUS_FLASH = has frostnade and deployed player_has_frostnade(id) { new retVal = STATUS_HIDE, curwpn = get_user_weapon(id);
// no override, variable explicitly set if(hasFrostNade[id]) { retVal = (curwpn == hasFrostNade[id] ? STATUS_FLASH : STATUS_SHOW); }
// override enabled, and I'm on the right team else if(get_pcvar_num(pcv_override) && (get_pcvar_num(pcv_teams) & _:cs_get_user_team(id))) { new types = get_pcvar_num(pcv_nadetypes);
// gets RGB colors from the cvar get_rgb_colors(team,rgb[3]) { static color[12], parts[3][4]; get_pcvar_string(pcv_color,color,11);
// if cvar is set to "team", use colors based on the given team if(equali(color,"team",4)) { if(team == 1) { rgb[0] = 150; rgb[1] = 0; rgb[2] = 0; } else { rgb[0] = 0; rgb[1] = 0; rgb[2] = 150; } } else { parse(color,parts[0],3,parts[1],3,parts[2],3); rgb[0] = str_to_num(parts[0]); rgb[1] = str_to_num(parts[1]); rgb[2] = str_to_num(parts[2]); } }
// scale a value equally (inversely?) with the distance that something // is from the center of another thing. that makes pretty much no sense, // so basically, the closer we are to the center of a ring, the higher // our value gets. // // EXAMPLE: distance = 60.0, radius = 240.0, maxVal = 100.0, minVal = 20.0 // we are 0.75 (1.0-(60.0/240.0)) of the way to the radius, so scaled with our // values, it comes out to 80.0 (20.0 + (0.75 * (100.0 - 20.0))) Float:radius_calc(Float:distance,Float:radius,Float:maxVal,Float:minVal) { if(maxVal <= 0.0) return 0.0; if(minVal >= maxVal) return minVal; return minVal + ((1.0 - (distance / radius)) * (maxVal - minVal)); }
// sets a user's chilled/frozen speed if applicable // (NOTE: does NOT reset his maxspeed if he is not chilled/frozen) set_user_chillfreeze_speed(id) { if(isFrozen[id]) { set_user_maxspeed(id, 1.0); } else if(isChilled[id]) { set_user_maxspeed(id, get_default_maxspeed(id)*(get_pcvar_float(pcv_chill_speed)/100.0)); } }
// gets the maxspeed a user should have, given his current weapon stock Float:get_default_maxspeed(id) { new wEnt = get_pdata_cbase(id, m_pActiveItem), Float:result = 250.0;
new g_hMenu new pEnabled new health_add new health_max
new nKiller new nKiller_hp new nHp_add new nHp_max
//bools new bool:g_damage[33] new bool:g_regen[33] new bool:g_health[33] new bool:g_godmode[33] new bool:g_trans[33] new bool:g_frost[33] new bool:g_flash[33]
public mshop(client, menu, item) { if (!is_user_alive(client) && !get_pcvar_num(pEnabled)) return PLUGIN_HANDLED;
switch(item) {
case 0: { if(cs_get_user_money(client) > 4000) { set_user_health(client, get_user_health(client) + 50); g_health[client] = true cs_set_user_money(client, cs_get_user_money(client) - 4000); client_print(client, print_chat, "^4[SHOP] ^3You Have Successfully Purcashed ^4+50hp]"); } else { client_print(client, print_chat, "^4[SHOP] ^3Sorry! ^4You Dont Have Enough Of Funds"); }
}
case 1: { if(cs_get_user_money(client) > 4000) { g_damage[client] = true cs_set_user_money(client, cs_get_user_money(client) - 4000); client_print(client, print_chat, "^4[SHOP] ^3You Have Successfully Purcashed ^42x Damage"); } else { client_print(client, print_chat, "^4[SHOP] ^3Sorry! ^4You Dont Have Enough Of Funds"); } }
case 2: { if(cs_get_user_money(client) > 6000) { set_user_godmode(client, 1); g_godmode[client] = true cs_set_user_money(client, cs_get_user_money(client) - 6000); client_print(client, print_chat, "^4[SHOP] ^3You Have Successfully Purcashed ^4GodMode"); } else { client_print(client, print_chat, "^4[SHOP] ^3Sorry! ^4You Dont Have Enough Of Funds"); } }
case 3: { if(cs_get_user_money(client) > 2000) { g_regen[client] = true cs_set_user_money(client, cs_get_user_money(client) - 2000); client_print(client, print_chat, "^4[SHOP] ^3You Have Successfully Purcashed ^4Health Regenration"); } else { client_print(client, print_chat, "^4[SHOP] ^3Sorry! ^4You Dont Have Enough Of Funds"); } }
case 4: { if(cs_get_user_money(client) > 4000) { set_user_rendering(client, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 50); g_trans[client] = true cs_set_user_money(client, cs_get_user_money(client) - 4000); client_print(client, print_chat, "^4[SHOP] ^3You Have Successfully Purcashed ^4Transperancy"); } else { client_print(client, print_chat, "^4[SHOP] ^3Sorry! ^4You Dont Have Enough Of Funds"); } }
case 5: { if(cs_get_user_money(client) > 4000) { client_print(client, print_chat, "^4[SHOP] ^3You Have Successfully Purcashed ^4Frost Nade"); cs_give_frost_nade(client) cs_set_user_money(client, cs_get_user_money(client) - 4000); g_frost[client] = true } else { client_print(client, print_chat, "^4[SHOP] ^3Sorry! ^4You Dont Have Enough Of Funds"); } }
case 6: { if(cs_get_user_money(client) > 2000) { give_item(client, "weapon_flashbang"); cs_set_user_bpammo(client, CSW_FLASHBANG, 2); cs_set_user_money(client, cs_get_user_money(client) - 2000); client_print(client, print_chat, "^4[SHOP] ^3You Have Successfully Purcashed ^4FlashBangs"); g_flash[client] = true } else { client_print(client, print_chat, "^4[SHOP] ^3Sorry! ^4You Dont Have Enough Of Funds"); } }
case MENU_EXIT: { //ntng }
} return PLUGIN_HANDLED;
}
public OnPlayerEvent_Damage(victim, inflictor, attacker, Float:damage, damagebits) { if(!is_user_alive(attacker)) return
if(get_user_weapon(attacker) == CSW_KNIFE) { // For first weapon if(g_damage[attacker] == true) { // This will increase the weapon damage by 2 times SetHamParamFloat(4,damage*2.0) }
}
}
public hook_death() { if(g_regen[0] == true && is_user_connected(0)) { // Killer id nKiller = read_data(1)