From d265b12bcb08d835fa536dd810ba13e9c34cd13a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yekta=20G=C3=BClery=C3=BCz?= <37214615+yek-ta@users.noreply.github.com> Date: Thu, 18 Jul 2019 17:07:38 +0300 Subject: [PATCH] FlagsOnMap 3.0 --- .../addons/amxmodx/scripting/FlagsOnMap.sma | 238 ++++++++++++------ 1 file changed, 167 insertions(+), 71 deletions(-) diff --git a/CreateFlagOnMap/addons/amxmodx/scripting/FlagsOnMap.sma b/CreateFlagOnMap/addons/amxmodx/scripting/FlagsOnMap.sma index 3500f2a..969b561 100644 --- a/CreateFlagOnMap/addons/amxmodx/scripting/FlagsOnMap.sma +++ b/CreateFlagOnMap/addons/amxmodx/scripting/FlagsOnMap.sma @@ -3,6 +3,9 @@ #include #include +#define MENU_COMMAND "amx_flagmenu" + + #if AMXX_VERSION_NUM < 183 #define argbreak strbreak #endif @@ -13,6 +16,7 @@ new const FlagClass[] = "CFlag"; new g_MapFile[64]; enum _:FlagValue { + flag[33], flag_model, flag_body, flag_skin @@ -22,13 +26,17 @@ new FlagsModels[MAXFLAG][32]; new FlagModelSkins[MAXFLAG][3][32] new totalFlags new configsdir[200] + public plugin_init() { - register_plugin("Create Flags on Map", "2.1", "Yek'-ta") - set_task(5.0,"CreateMapFlags") + register_plugin("Create Flag on Map", "3.0", "Yek'-ta") + register_dictionary("FlagsOnMap.txt") + + register_clcmd(MENU_COMMAND, "FlagMenu", ADMIN_RCON) - register_clcmd( "amx_flagmenu", "FlagMenu") + register_event("HLTV", "round_start", "a", "1=0", "2=0"); } + public plugin_precache() { get_configsdir(configsdir,199) @@ -55,35 +63,80 @@ public plugin_precache() } } } + CreateMapFlags() +} + +public client_putinserver(id){ + PlayerFlagValue[flag_model][id]=0; + PlayerFlagValue[flag_body][id]=0; + PlayerFlagValue[flag_skin][id]=0; + PlayerFlagValue[flag][id]=0; +} + +public round_start(){ + new ent, Float:Angle[3]; + ent = -1 + Angle[1] = float(random_num(0, 359)) + while ((ent = find_ent_by_class(ent, FlagClass))){ + if(pev(ent,pev_impulse)){ + set_pev(ent, pev_angles, Angle); + } + } } -public FlagMenu(player){ - if(get_user_flags(player) & ADMIN_RCON){ - new menu, Menuz[512] - formatex(Menuz, charsmax(Menuz), "\y [ \rFlag Menu \y]"); +public FlagMenu(player, level, cid){ + if( !cmd_access( player, level, cid, 1 ) ) + return PLUGIN_HANDLED; + + new menu, Menuz[512] + + formatex(Menuz, charsmax(Menuz), "%L", player, "FLAG_MENU"); - menu = menu_create(Menuz, "FlagMenuC") + menu = menu_create(Menuz, "FlagMenuC") - formatex(Menuz, charsmax(Menuz), "\wCreate Flag"); + if(PlayerFlagValue[flag][player] == 0){ + + formatex(Menuz, charsmax(Menuz), "%L", player, "CREATE_FLAG"); menu_additem(menu, Menuz, "1") - formatex(Menuz, charsmax(Menuz), "\wFlag Model [%s]", FlagsModels[PlayerFlagValue[flag_model][player]][7]); + formatex(Menuz, charsmax(Menuz), "%L", player, "FLAG_MODEL", FlagsModels[PlayerFlagValue[flag_model][player]][7]); menu_additem(menu, Menuz, "2") - formatex(Menuz, charsmax(Menuz), "\wFlag Body [%s]", PlayerFlagValue[flag_body][player] == 0 ? "Small" : "Large" ); + formatex(Menuz, charsmax(Menuz), "%L", player, "FLAG_BODY", PlayerFlagValue[flag_body][player] == 0 ? "Small" : "Large" ); menu_additem(menu, Menuz, "3") - formatex(Menuz, charsmax(Menuz), "\wFlag Skin [%s]", FlagModelSkins[PlayerFlagValue[flag_model][player]][PlayerFlagValue[flag_skin][player]]); + formatex(Menuz, charsmax(Menuz), "%L", player, "FLAG_SKIN", FlagModelSkins[PlayerFlagValue[flag_model][player]][PlayerFlagValue[flag_skin][player]]); menu_additem(menu, Menuz, "4") - formatex(Menuz, charsmax(Menuz), "\wSave Flags" ); + formatex(Menuz, charsmax(Menuz), "%L", player, "SELECT_FLAG" ); menu_additem(menu, Menuz, "5") - formatex(Menuz, charsmax(Menuz), "\wDelete Flags" ); + formatex(Menuz, charsmax(Menuz), "%L", player, "SAVE_FLAGS" ); menu_additem(menu, Menuz, "6") + formatex(Menuz, charsmax(Menuz), "%L", player, "DELETE_FLAGS" ); + menu_additem(menu, Menuz, "7") + } + else { + formatex(Menuz, charsmax(Menuz), "%L", player, "RANDOM_TURN", pev(PlayerFlagValue[flag][player],pev_impulse) == 0 ? "OFF" : "ON"); + menu_additem(menu, Menuz, "1") + + if(pev(PlayerFlagValue[flag][player], pev_impulse) == 0){ + formatex(Menuz, charsmax(Menuz), "%L", player, "TURN"); + menu_additem(menu, Menuz, "2") + } + + formatex(Menuz, charsmax(Menuz), "%L", player, "ANIM_FLAG"); + menu_additem(menu, Menuz, "3") + + formatex(Menuz, charsmax(Menuz), "%L", player, "DELETE_FLAG"); + menu_additem(menu, Menuz, "4") - menu_display(player, menu, 0) + formatex(Menuz, charsmax(Menuz), "%L", player, "DROP_FLAG"); + menu_additem(menu, Menuz, "5") } + menu_display(player, menu, 0) + + return PLUGIN_HANDLED } @@ -100,63 +153,105 @@ public FlagMenuC(player, menu, item) menu_item_getinfo(menu, item, access, data,5, iName, 63, callback) new key = str_to_num(data) - if(!is_user_alive(player)){ - client_print(player,print_chat, "You should be alive for this command") - return PLUGIN_HANDLED; - } switch(key) { case 1: { - NowCreateFlag(GetUser3Origin(player), player) + if(PlayerFlagValue[flag][player] == 0){ + NowCreateFlag(GetUser3Origin(player), player) + } + else{ + set_pev(PlayerFlagValue[flag][player], pev_impulse, !pev(PlayerFlagValue[flag][player],pev_impulse)) + } + client_cmd(player, MENU_COMMAND) } case 2: { - PlayerFlagValue[flag_model][player]++ - PlayerFlagValue[flag_skin][player] = 0 - if(PlayerFlagValue[flag_model][player] >= totalFlags) - PlayerFlagValue[flag_model][player] = 0; - FlagMenu(player) + if(PlayerFlagValue[flag][player] == 0){ + PlayerFlagValue[flag_model][player]++ + PlayerFlagValue[flag_skin][player] = 0 + if(PlayerFlagValue[flag_model][player] >= totalFlags) + PlayerFlagValue[flag_model][player] = 0; + } + else{ + static Float:f_Angles[3]; + pev(PlayerFlagValue[flag][player], pev_angles, f_Angles) + f_Angles[1] += 5.0 + if(f_Angles[1] >= 360.0){ + f_Angles[1]=0.0 + } + set_pev(PlayerFlagValue[flag][player], pev_angles, f_Angles); + } + client_cmd(player, MENU_COMMAND) } case 3: { - PlayerFlagValue[flag_body][player] = PlayerFlagValue[flag_body][player] == 0 ? 1 : 0; - FlagMenu(player) + if(PlayerFlagValue[flag][player] == 0){ + PlayerFlagValue[flag_body][player] = PlayerFlagValue[flag_body][player] == 0 ? 1 : 0; + } + else{ + set_pev(PlayerFlagValue[flag][player], pev_sequence, !pev(PlayerFlagValue[flag][player], pev_sequence)) + } + client_cmd(player, MENU_COMMAND) } case 4: { - PlayerFlagValue[flag_skin][player]++ - if(PlayerFlagValue[flag_skin][player] >= 3 || !strlen(FlagModelSkins[PlayerFlagValue[flag_model][player]][PlayerFlagValue[flag_skin][player]])) - PlayerFlagValue[flag_skin][player] = 0; - FlagMenu(player) + if(PlayerFlagValue[flag][player] == 0){ + PlayerFlagValue[flag_skin][player]++ + if(PlayerFlagValue[flag_skin][player] >= 3 || !strlen(FlagModelSkins[PlayerFlagValue[flag_model][player]][PlayerFlagValue[flag_skin][player]])) + PlayerFlagValue[flag_skin][player] = 0; + } + else{ + DestroyEntity(PlayerFlagValue[flag][player]); + PlayerFlagValue[flag][player] = 0 + } + client_cmd(player, MENU_COMMAND) } case 5: { - save_allobject() - client_print(player,print_chat, "Saved Flags..") + if(PlayerFlagValue[flag][player] == 0){ + static Float: originf[3] + pev(player, pev_origin, originf); + static victim = -1; + static thereisflag + thereisflag = 0 + while ((victim = engfunc(EngFunc_FindEntityInSphere, victim, originf, 50.0))) + { + static classname[32]; + pev(victim, pev_classname, classname, charsmax(classname)); + if(equal (classname, FlagClass)) + { + thereisflag = victim + } + } + + PlayerFlagValue[flag][player] = thereisflag + } + else{ + PlayerFlagValue[flag][player] = 0 + } + client_cmd(player, MENU_COMMAND) } case 6: { - client_print(player,print_chat, "Deleted Flags..") + save_allobject() + client_print(player,print_chat, "%L",player,"SAVED_FLAGS") + } + case 7: + { + client_print(player,print_chat, "%L",player,"DELETED_FLAGS") delete_file(g_MapFile); new ent = -1; while ((ent = find_ent_by_class(ent, FlagClass))) DestroyEntity(ent); + + client_cmd(player, MENU_COMMAND) } } return PLUGIN_HANDLED; } - - - -public client_putinserver(id){ - PlayerFlagValue[flag_model][id]=0; - PlayerFlagValue[flag_body][id]=0; - PlayerFlagValue[flag_skin][id]=0; -} - -public DestroyEntity(ent) { +DestroyEntity(ent) { if (is_valid_ent(ent)) remove_entity(ent) } @@ -169,70 +264,71 @@ stock Float:GetUser3Origin(id) return originf; } -public CreateMapFlags(){ +CreateMapFlags(){ new map[32] get_mapname(map, 31) - format(g_MapFile, sizeof(g_MapFile), "maps/%s.mflags.cfg", map) + format(g_MapFile, sizeof(g_MapFile), "maps/%s.mapflags.cfg", map) if (file_exists(g_MapFile)) { new data[124], len new line = 0 - new coord[6][8] + new coord[9][8] new Float:origin[3] - new modeli[3] + new Float:angle + new modeli[5] while((line = read_file(g_MapFile , line , data , 123 , len))) { if (len < 2 || data[0] == ';' || data[0] == '/') continue; - parse(data, coord[0], 7, coord[1], 7, coord[2], 7, coord[3], 1, coord[4], 1, coord[5], 1) + parse(data, coord[0], 7, coord[1], 7, coord[2], 7,coord[3], 7, coord[4], 1, coord[5], 1, coord[6], 1, coord[7], 1, coord[8], 1) origin[0] = (str_to_float(coord[0])) origin[1] = (str_to_float(coord[1])) origin[2] = (str_to_float(coord[2])) - modeli[0] = (str_to_num(coord[3])) - modeli[1] = (str_to_num(coord[4])) - modeli[2] = (str_to_num(coord[5])) + angle = (str_to_float(coord[3])) + modeli[0] = (str_to_num(coord[4])) + modeli[1] = (str_to_num(coord[5])) + modeli[2] = (str_to_num(coord[6])) + modeli[3] = (str_to_num(coord[7])) + modeli[4] = (str_to_num(coord[8])) if(modeli[0] < totalFlags) - CreateFlag(origin,modeli[0],modeli[1], modeli[2]) + CreateFlag(origin,modeli[0],modeli[1], modeli[2], 0, modeli[3], angle, modeli[4]) } } } stock NowCreateFlag(Float:fOrigin[3],player) { - CreateFlag(fOrigin, PlayerFlagValue[flag_model][player], PlayerFlagValue[flag_body][player],PlayerFlagValue[flag_skin][player]); + CreateFlag(fOrigin, PlayerFlagValue[flag_model][player], PlayerFlagValue[flag_body][player],PlayerFlagValue[flag_skin][player], player, 0, 0.0 , 0); } -public save_allobject() { +save_allobject() { delete_file(g_MapFile) new ent = -1 - new Float:fOrigin[3], line[64] + new Float:fOrigin[3], line[64], Float:fAngle[3] while ((ent = find_ent_by_class(ent, FlagClass))) { pev(ent,pev_origin,fOrigin) + pev(ent,pev_angles,fAngle) - formatex(line, sizeof(line), "%0.3f %0.3f %0.3f %i %i %i", fOrigin[0], fOrigin[1], fOrigin[2], pev(ent,pev_button), pev(ent,pev_body), pev(ent,pev_skin)) + formatex(line, sizeof(line), "%0.3f %0.3f %0.3f %0.3f %i %i %i %i %i", fOrigin[0], fOrigin[1], fOrigin[2], fAngle[1], pev(ent,pev_button), pev(ent,pev_body), pev(ent,pev_skin), pev(ent,pev_impulse), pev(ent,pev_sequence)) write_file(g_MapFile, line) } } -CreateFlag(Float:fOrigin[3], model, body, skin) +CreateFlag(Float:fOrigin[3], model, body, skin, player, random, Float:Angle, anim) { new pEntity = create_entity("info_target"); entity_set_string(pEntity, EV_SZ_classname, FlagClass ); - set_pev( pEntity, pev_movetype, MOVETYPE_NONE) + new Float: Angles[3] + Angles[1] = Angle + set_pev( pEntity, pev_angles, Angles) set_pev( pEntity, pev_origin, fOrigin) + set_pev( pEntity, pev_movetype, MOVETYPE_NONE) set_pev( pEntity, pev_body, body) set_pev( pEntity, pev_skin, skin) entity_set_model(pEntity, FlagsModels[model]); set_pev( pEntity, pev_button, model) - Set_Entity_Anim(pEntity,0,0) -} -Set_Entity_Anim(ent, forumcsd, ResetFrame) -{ - if(!is_valid_ent(ent)) - return - - set_pev( ent, pev_animtime, get_gametime()) - set_pev( ent, pev_framerate, 1.0) - set_pev( ent, pev_sequence, forumcsd) - - if(ResetFrame) set_pev( ent, pev_frame, 0.0) + set_pev( pEntity, pev_impulse, random) + set_pev( pEntity, pev_animtime, get_gametime()) + set_pev( pEntity, pev_framerate, 1.0) + set_pev( pEntity, pev_sequence, anim) + PlayerFlagValue[flag][player] = pEntity }