Tanulgatom ezt a dolgot még,ezért kérdezek. A lényeg, hogy azt szeretném, ha egy plugin akármit ír a chatben akkor szerepeljen egy prefix a kiírás előtt, mint ahogy bizonyos pluginoknál meg van írva (amire gondolok arra példa: [amx_rm] [advanced-bans] stb...) egyelőre így oldottam meg:
Kód:
#include <amxmodx> #if !defined NO_CS_CZ #include <fun> #endif #include <Vexd_Utilities> #include <chatcolor>
new g_pissPrefix
new piss_model new piss_sprite new water_splash new count_piss[33] new count_puddle[33] new bool:PissFlag[33] new bool:aim[33] new Float:aim_origin[33][3] #if !defined NO_CS_CZ new player_origins[33][3] new mod_name[32] #endif
public plugin_init() {
register_plugin("AMX Piss","2.2","KRoTaL") register_dictionary("piss.txt") register_clcmd("piss","piss_on_player",0,"PS_CONSOLE1") register_clcmd("say /piss","piss_help",0,"PS_CONSOLE2") register_clcmd("say","handle_say") register_cvar("amx_maxpees","6") register_cvar("amx_piss_admin","0") register_cvar("amx_piss_effect","0") register_event("DeathMsg","death_event","a") register_event("ResetHUD", "reset_hud", "be") #if !defined NO_CS_CZ register_event("CurWeapon","cur_weapon","be","1=1") get_modname(mod_name,31) #endif g_pissPrefix = register_cvar( "amx_piss_prefix", "PISS" ); server_cmd("exec addons/amxmodx/configs/piss/cvars.cfg") }
public piss_on_player(id) { new pissPrefix[64] get_pcvar_string( g_pissPrefix, pissPrefix, 63 );
if (get_cvar_num("amx_maxpees")==0) return PLUGIN_HANDLED if (!is_user_alive(id)) return PLUGIN_HANDLED if ( (get_cvar_num("amx_piss_admin")==1) && !(get_user_flags(id) & ADMIN_LEVEL_A) ) { console_print(id,"%L",LANG_PLAYER,"PS_COMMAND") return PLUGIN_HANDLED } if(PissFlag[id]) return PLUGIN_HANDLED
#if !defined NO_CS_CZ new player_origin[3], players[32], player, inum=0, dist, last_dist=99999, last_id
get_user_origin(id,player_origin,0) get_players(players,inum,"b") if (inum>0) { for (new i=0;i<inum;i++) { player = players[i] if (player!=id) { dist = get_distance(player_origin,player_origins[player]) if (dist<last_dist) { last_id = player last_dist = dist } } } if (last_dist<80) { #endif if (count_piss[id] > get_cvar_num("amx_maxpees")) { client_print_color(id,print_chat, "^4[%s] ^3 %L",pissPrefix,LANG_PLAYER,"PS_TIMES", get_cvar_num("amx_maxpees")) return PLUGIN_CONTINUE } new player_name[32] get_user_name(id, player_name, 31) #if !defined NO_CS_CZ if(get_user_flags(last_id) & ADMIN_IMMUNITY) { client_print_color(id,print_chat,"^4[%s] ^3 %L",pissPrefix,LANG_PLAYER,"PS_ADMIN") return PLUGIN_HANDLED } new dead_name[32] get_user_name(last_id, dead_name, 31) client_print_color(0,print_chat,"^4[%s] ^3 %L",pissPrefix,LANG_PLAYER,"PS_PISS1", player_name, dead_name) #else client_print_color(0,print_chat,"^4[%s] ^3 %L",pissPrefix,LANG_PLAYER,"PS_PISS2", player_name) #endif count_piss[id]+=1 count_puddle[id]=1 new ids[1] ids[0]=id PissFlag[id]=true aim[id]=false #if !defined NO_CS_CZ if( (equali(mod_name,"cstrike")) || (equali(mod_name,"czero")) ) { client_cmd(id, "weapon_knife") entity_set_string(id, EV_SZ_viewmodel, "") entity_set_string(id, EV_SZ_weaponmodel, "") set_user_maxspeed(id, -1.0) } #endif emit_sound(id,CHAN_VOICE,"piss/pissing.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) switch(get_cvar_num("amx_piss_effect")) { case 0: set_task(0.2,"make_pee",1481+id,ids,1,"a",48) case 1: set_task(0.1,"make_pee",1481+id,ids,1,"a",102) default: set_task(0.2,"make_pee",1481+id,ids,1,"a",48) } set_task(2.2,"place_puddle",3424+id,ids,1,"a",4) #if !defined NO_CS_CZ set_task(12.0,"weapons_back",6794+id,ids,1) } else { client_print_color(id,print_chat,"^4[%s] ^3 %L",pissPrefix,LANG_PLAYER,"PS_DEAD") return PLUGIN_HANDLED } } #endif return PLUGIN_HANDLED }
public sqrt(num) { new div = num new result = 1 while (div > result) { div = (div + result) / 2 result = num / div } return div }
public make_pee(ids[]) { new id=ids[0] new vec[3] new aimvec[3] new velocityvec[3] new length get_user_origin(id,vec) get_user_origin(id,aimvec,3) new distance = get_distance(vec,aimvec) new speed = floatround(distance*1.9)
velocityvec[0]=aimvec[0]-vec[0] velocityvec[1]=aimvec[1]-vec[1] velocityvec[2]=aimvec[2]-vec[2]
length=sqrt(velocityvec[0]*velocityvec[0]+velocityvec[1]*velocityvec[1]+velocityvec[2]*velocityvec[2])
velocityvec[0]=velocityvec[0]*speed/length velocityvec[1]=velocityvec[1]*speed/length velocityvec[2]=velocityvec[2]*speed/length
switch(get_cvar_num("amx_piss_effect")) { case 0: { message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(101) write_coord(vec[0]) write_coord(vec[1]) write_coord(vec[2]) write_coord(velocityvec[0]) write_coord(velocityvec[1]) write_coord(velocityvec[2]) write_byte(102) // color write_byte(160) // speed message_end() } case 1: { message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(106) write_coord(vec[0]) write_coord(vec[1]) write_coord(vec[2]) write_coord(velocityvec[0]) write_coord(velocityvec[1]) write_coord(velocityvec[2]+100) write_angle (0) write_short (piss_model) write_byte (0) write_byte (255) message_end()
message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte (1) write_short (id) write_coord(aimvec[0]) write_coord(aimvec[1]) write_coord(aimvec[2]) write_short(piss_sprite) write_byte( 1 ) // framestart write_byte( 6 ) // framerate write_byte( 1 ) // life write_byte( 8 ) // width write_byte( 0 ) // noise write_byte( 255 ) // r, g, b write_byte( 255 ) // r, g, b write_byte( 0 ) // r, g, b write_byte( 200 ) // brightness write_byte( 10 ) // speed message_end()
message_begin( MSG_BROADCAST,SVC_TEMPENTITY) write_byte(17) write_coord(aimvec[0]) write_coord(aimvec[1]) write_coord(aimvec[2]) write_short(water_splash) write_byte(16) write_byte(18) message_end()
} default: { message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(101) write_coord(vec[0]) write_coord(vec[1]) write_coord(vec[2]) write_coord(velocityvec[0]) write_coord(velocityvec[1]) write_coord(velocityvec[2]) write_byte(102) // color write_byte(160) // speed message_end() } } }
public place_puddle(ids[]) { new id=ids[0] if(!aim[id]) { new origin[3] get_user_origin(id,origin,3) aim_origin[id][0]=float(origin[0]) aim_origin[id][1]=float(origin[1]) aim_origin[id][2]=float(origin[2]) }
new puddle_entity puddle_entity = CreateEntity("info_target")
if(puddle_entity == 0) { return PLUGIN_HANDLED_MAIN }
new Float:MinBox[3] new Float:MaxBox[3]
MinBox[0] = -1.0 MinBox[1] = -1.0 MinBox[2] = -1.0 MaxBox[0] = 1.0 MaxBox[1] = 1.0 MaxBox[2] = 1.0
Entvars_Set_Vector(puddle_entity, EV_VEC_mins, MinBox) Entvars_Set_Vector(puddle_entity, EV_VEC_maxs, MaxBox)
switch(count_puddle[id]) { case 1: { Entvars_Set_String(puddle_entity, EV_SZ_classname, "piss_puddle1") ENT_SetModel(puddle_entity, "models/piss/piss_puddle1.mdl") } case 2: { Entvars_Set_String(puddle_entity, EV_SZ_classname, "piss_puddle2") ENT_SetModel(puddle_entity, "models/piss/piss_puddle2.mdl") } case 3: { Entvars_Set_String(puddle_entity, EV_SZ_classname, "piss_puddle3") ENT_SetModel(puddle_entity, "models/piss/piss_puddle3.mdl") } case 4: { Entvars_Set_String(puddle_entity, EV_SZ_classname, "piss_puddle4") ENT_SetModel(puddle_entity, "models/piss/piss_puddle4.mdl") } case 5: { Entvars_Set_String(puddle_entity, EV_SZ_classname, "piss_puddle5") ENT_SetModel(puddle_entity, "models/piss/piss_puddle5.mdl") #if defined NO_CS_CZ PissFlag[id]=false #endif } default: {} }
ENT_SetOrigin(puddle_entity, aim_origin[id]) Entvars_Set_Int(puddle_entity, EV_INT_solid, 3) Entvars_Set_Int(puddle_entity, EV_INT_movetype, 6) Entvars_Set_Edict(puddle_entity, EV_ENT_owner, id)
count_puddle[id]+=1 aim[id]=true
return PLUGIN_CONTINUE }
public death_event() { new victim = read_data(2) #if !defined NO_CS_CZ get_user_origin(victim,player_origins[victim],0) #endif
if(PissFlag[victim]) reset_piss(victim)
return PLUGIN_CONTINUE }
#if !defined NO_CS_CZ public weapons_back(ids[]) { PissFlag[ids[0]]=false if( (equali(mod_name,"cstrike")) || (equali(mod_name,"czero")) ) { set_user_maxspeed(ids[0], 250.0) client_cmd(ids[0], "weapon_knife") } }
public cur_weapon(id) { if(PissFlag[id]) { if( (equali(mod_name,"cstrike")) || (equali(mod_name,"czero")) ) { client_cmd(id, "weapon_knife") set_user_maxspeed(id, -1.0) entity_set_string(id, EV_SZ_viewmodel, "") entity_set_string(id, EV_SZ_weaponmodel, "") } }
return PLUGIN_CONTINUE } #endif
public reset_piss(id) { if(task_exists(1481+id)) remove_task(1481+id) if(task_exists(3424+id)) remove_task(3424+id) #if !defined NO_CS_CZ if(task_exists(6794+id)) remove_task(6794+id) #endif emit_sound(id,CHAN_VOICE,"piss/pissing.wav", 0.0, ATTN_NORM, 0, PITCH_NORM) PissFlag[id]=false
return PLUGIN_CONTINUE }
public reset_hud(id) { if(task_exists(1481+id)) remove_task(1481+id) if(task_exists(3424+id)) remove_task(3424+id) #if !defined NO_CS_CZ if(task_exists(6794+id)) remove_task(6794+id) #endif emit_sound(id,CHAN_VOICE,"piss/pissing.wav", 0.0, ATTN_NORM, 0, PITCH_NORM) PissFlag[id]=false
new iCurrent
for (new i=1 ; i<count_piss[id] ; i++) { iCurrent = FindEntity(-1, "piss_puddle1") if(iCurrent > 0) RemoveEntity(iCurrent) iCurrent = FindEntity(-1, "piss_puddle2") if(iCurrent > 0) RemoveEntity(iCurrent) iCurrent = FindEntity(-1, "piss_puddle3") if(iCurrent > 0) RemoveEntity(iCurrent) iCurrent = FindEntity(-1, "piss_puddle4") if(iCurrent > 0) RemoveEntity(iCurrent) iCurrent = FindEntity(-1, "piss_puddle5") if(iCurrent > 0) RemoveEntity(iCurrent) } count_piss[id]=1
return PLUGIN_CONTINUE }
public piss_help(id) { new pissPrefix[64] get_pcvar_string( g_pissPrefix, pissPrefix, 63 ); client_print_color(id, print_chat,"^4[%s] ^3 %L",pissPrefix,LANG_PLAYER,"PS_HELP1") client_print_color(id, print_chat,"^4[%s] ^3 %L",pissPrefix,LANG_PLAYER,"PS_HELP2") client_print_color(id, print_chat,"^4[%s] ^3 %L",pissPrefix,LANG_PLAYER,"PS_HELP3") return PLUGIN_CONTINUE }
public handle_say(id) { new said[192] read_args(said,192) remove_quotes(said) new pissPrefix[64] get_pcvar_string( g_pissPrefix, pissPrefix, 63 );
if( (containi(said, "piss") != -1) && !(containi(said, "/piss") != -1) ) { client_print_color(id, print_chat,"^4[%s] ^3 %L",pissPrefix,LANG_PLAYER,"PS_TIP") }
return PLUGIN_CONTINUE }
public plugin_precache() { if (file_exists("sound/piss/pissing.wav")) precache_sound("piss/pissing.wav") if (file_exists("models/piss/piss_puddle1.mdl")) precache_model("models/piss/piss_puddle1.mdl") if (file_exists("models/piss/piss_puddle2.mdl")) precache_model("models/piss/piss_puddle2.mdl") if (file_exists("models/piss/piss_puddle3.mdl")) precache_model("models/piss/piss_puddle3.mdl") if (file_exists("models/piss/piss_puddle4.mdl")) precache_model("models/piss/piss_puddle4.mdl") if (file_exists("models/piss/piss_puddle5.mdl")) precache_model("models/piss/piss_puddle5.mdl") if (file_exists("models/piss/piss.mdl")) piss_model = precache_model("models/piss/piss.mdl") piss_sprite = precache_model("sprites/plasma.spr") water_splash = precache_model("sprites/wsplash3.spr") }
public client_connect(id) { PissFlag[id]=false count_piss[id]=1 }
public client_disconnect(id) { reset_hud(id) }
1.így most van egy globális változó (ha jól sejtem) - g_pissPrefix néven 2.plugin_init-ben bekérem az értékét egy külső file-ból (g_pissPrefix = register_cvar( "amx_piss_prefix", "PISS" );) 3.MINDEN funkciónál ahol kiírást csinálok generálnom kell egy új változót amiben meghívom a globális változó értékét (pissPrefix, get_pcvar_string( g_pissPrefix, pissPrefix, 63 );) 4. a kiírásoknál az előbb generált változó működik (pissPrefix).
a globális változóval nem megy a dolog. tulajdonképpen egy másik sma-ból vettem át ezt, igaz abban csak egy funkciónál volt kiíratás a chatben, így csak egyszer kellett generálnia hozzá változót. valaki el tudná magyarázni ezen a példán, hogy mit rontok el?
|