Skip to content

Commit

Permalink
FlagsOnMap 3.0
Browse files Browse the repository at this point in the history
  • Loading branch information
yek-ta committed Jul 18, 2019
1 parent d4f93b6 commit d265b12
Showing 1 changed file with 167 additions and 71 deletions.
238 changes: 167 additions & 71 deletions CreateFlagOnMap/addons/amxmodx/scripting/FlagsOnMap.sma
Expand Up @@ -3,6 +3,9 @@
#include <engine>
#include <fakemeta>
#define MENU_COMMAND "amx_flagmenu"
#if AMXX_VERSION_NUM < 183
#define argbreak strbreak
#endif
Expand All @@ -13,6 +16,7 @@ new const FlagClass[] = "CFlag";
new g_MapFile[64];
enum _:FlagValue
{
flag[33],
flag_model,
flag_body,
flag_skin
Expand All @@ -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)
Expand All @@ -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
}
Expand All @@ -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)
}
Expand All @@ -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
}

0 comments on commit d265b12

Please sign in to comment.