codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
#include <amxmodx> #include <amxmisc> #include <engine> #include <fakemeta> #define PLUGIN "Escape Progress" #define VERSION "1.0.2" #define AUTHOR "Kia + Raheem" #define EDITOR_FLAG ADMIN_BAN #define CLASSNAME_CHECKPOINT "ZEV2_Checkpoint" #define CHECKPOINT_MAX 20 #define CHECKPOINT_SIZE 150.0 #define CHECKPOINT_SPRITE "sprites/ZombieEscapeV2/checkpoint.spr" new g_iPointsLoaded new g_iPointsSet new g_iPosition[33] new g_iLines new bool:g_bShowHUD new g_aCheckpoints[CHECKPOINT_MAX][3] new g_aCheckpointPositions[CHECKPOINT_MAX][2] new g_szFileName[128] new g_SyncObj public plugin_precache() { precache_model(CHECKPOINT_SPRITE) } public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_clcmd("say /editor", "ClCMD_Editor") register_touch(CLASSNAME_CHECKPOINT, "player", "Touch_PlayerCheckpoint") g_SyncObj = CreateHudSyncObj() set_task(1.0, "RefreshCheckpointHUD", 0, "", 0, "b") ReadMapName() ReadCheckpoints() SetCheckpoints() } public ze_user_infected() { for(new i = 0; i < g_iLines; i++) { g_aCheckpointPositions[i][0] = 0 g_aCheckpointPositions[i][1] = 0 } arrayset(g_iPosition, charsmax(g_iPosition), CHECKPOINT_MAX + 2) g_bShowHUD = true } public ze_roundend() { g_bShowHUD = false for(new i = 0; i < g_iPointsSet; i++) { g_aCheckpointPositions[i][0] = 0 } } public ClCMD_Editor(id) { if(!(get_user_flags(id) & EDITOR_FLAG)) return PLUGIN_HANDLED new menu = menu_create("Zombie Escape V2^nCheckpoint Editor Menu", "ClCMD_Editor_Handler") new szMenuString[64] formatex(szMenuString, charsmax(szMenuString), "Checkpoints set : \y%i", g_iPointsSet) menu_additem(menu, szMenuString, "1", 0) menu_addblank(menu, 0) menu_additem(menu, "Add Checkpoint here", "2", 0) menu_additem(menu, "Remove nearest Checkpoint", "3", 0) menu_additem(menu, "Reload Checkpoint File", "4", 0) menu_setprop(menu, MPROP_EXIT, MEXIT_ALL) menu_display(id, menu, 0) return PLUGIN_HANDLED } public ClCMD_Editor_Handler(id, menu, item) { new data[6], szName[64]; new access, callback; menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback); new key = str_to_num(data); switch(key) { case 2: // Writing Checkpoint { new iFile = fopen(g_szFileName, "at") if(iFile) { new iOrigin[3] get_user_origin(id, iOrigin, 0) new szOrigin[256] formatex(szOrigin, charsmax(szOrigin), "%d %d %d^n", iOrigin[0],iOrigin[1],iOrigin[2]) fputs(iFile, szOrigin) } fclose(iFile) } case 3: // Removing nearest Checkpoint { new iEnt = GetNearestCheckpoint(id) if(!iEnt) { log_amx("No Entity found!") return PLUGIN_HANDLED } new Float:flOrigin[3] pev(iEnt, pev_origin, flOrigin) remove_entity(iEnt) new iOrigin[3] iOrigin[0] = floatround(flOrigin[0]) iOrigin[1] = floatround(flOrigin[1]) iOrigin[2] = floatround(flOrigin[2]) new iTempOrigin[3] new iTempFile = fopen("ZEV2_Temp.cfg", "at") new iFile = fopen(g_szFileName, "at") if(iFile) { new szLineBuffer[64] while(fgets(iFile, szLineBuffer, charsmax(szLineBuffer))) { parse(szLineBuffer, iTempOrigin[0], 7, iTempOrigin[1], 7, iTempOrigin[2], 7) if(iTempOrigin[0] != iOrigin[0] && iTempOrigin[1] != iOrigin[1] && iTempOrigin[2] != iOrigin[2]) { log_amx("Valid Entity found. To be deleted : %d %d %d - Found : %d %d %d.", iOrigin[0], iOrigin[1], iOrigin[2], iTempOrigin[0], iTempOrigin[1], iTempOrigin[2]) fputs(iTempFile, szLineBuffer) } else { log_amx("Invalid Entity found. Deleting : %d %d %d.", iOrigin[0], iOrigin[1], iOrigin[2]) } } fclose(iTempFile) fclose(iFile) delete_file(g_szFileName) rename_file("ZEV2_Temp.cfg", g_szFileName, 1) ReadCheckpoints() RemoveAllCheckPoints() SetCheckpoints() } } case 4: // Reload Checkpoints { ReadCheckpoints() RemoveAllCheckPoints() SetCheckpoints() } } return PLUGIN_HANDLED } public Touch_PlayerCheckpoint(iEnt, id) { new iCheckpointPos = entity_get_int(iEnt, EV_INT_iuser1) if(g_iPosition[id] != iCheckpointPos) { g_iPosition[id] = iCheckpointPos g_aCheckpointPositions[iCheckpointPos][is_user_T(id) ? 1 : 0]++ if(iCheckpointPos != 0) g_aCheckpointPositions[iCheckpointPos - 1][is_user_T(id) ? 1 : 0]-- } } public RefreshCheckpointHUD() { if(!g_bShowHUD) return PLUGIN_HANDLED new szTopLane[128], szMidLane[128], szBotLane[128], szToAdd[128] formatex(szTopLane, charsmax(szTopLane), "-----------^t^t^t ") formatex(szMidLane, charsmax(szMidLane), "RUN >>>^t^t^t^t^t^t") formatex(szBotLane, charsmax(szBotLane), "-----------^t^t^t ") for(new i = 0; i < g_iPointsSet; i++) { formatex(szToAdd, charsmax(szToAdd), "[%i] ", g_aCheckpointPositions[i][0]) add(szTopLane, charsmax(szTopLane), szToAdd, charsmax(szToAdd)) formatex(szToAdd, charsmax(szToAdd), ">-->") add(szMidLane, charsmax(szMidLane), szToAdd, charsmax(szToAdd)) formatex(szToAdd, charsmax(szToAdd), "[%i] ", g_aCheckpointPositions[i][1]) add(szBotLane, charsmax(szBotLane), szToAdd, charsmax(szToAdd)) } formatex(szToAdd, charsmax(szToAdd), " ^t^t^t-----------") add(szTopLane, charsmax(szTopLane), szToAdd, charsmax(szToAdd)) formatex(szToAdd, charsmax(szToAdd), "^t^t^t^t^t^t>>> END") add(szMidLane, charsmax(szMidLane), szToAdd, charsmax(szToAdd)) formatex(szToAdd, charsmax(szToAdd), " ^t^t^t-----------") add(szBotLane, charsmax(szBotLane), szToAdd, charsmax(szToAdd)) set_hudmessage(0, 255, 0, -1.0, 0.10, 0, 6.0, 1.0) ShowSyncHudMsg(0, g_SyncObj, "Humans^n%s^n%s^n%s^nZombies", szTopLane, szMidLane, szBotLane) return PLUGIN_HANDLED } public ReadMapName() { get_configsdir(g_szFileName, charsmax(g_szFileName)) static szMap[32] get_mapname(szMap, charsmax(szMap)) formatex(g_szFileName, charsmax(g_szFileName), "%s\ZombieEscapeV2\map_checkpoints\%s.cfg", g_szFileName, szMap) } public ReadCheckpoints() { g_iPointsLoaded = 0 new iOrigin[3][8] new iFile = fopen(g_szFileName, "r") if(iFile) { new szLineBuffer[64] while(fgets(iFile, szLineBuffer, charsmax(szLineBuffer))) { parse(szLineBuffer, iOrigin[0], 7, iOrigin[1], 7, iOrigin[2], 7) g_aCheckpoints[g_iPointsLoaded][0] = str_to_num(iOrigin[0]) g_aCheckpoints[g_iPointsLoaded][1] = str_to_num(iOrigin[1]) g_aCheckpoints[g_iPointsLoaded][2] = str_to_num(iOrigin[2]) log_amx("[ZEV2: Checkpoints] Added Checkpoint at : %d %d %d", g_aCheckpoints[g_iPointsLoaded][0], g_aCheckpoints[g_iPointsLoaded][1], g_aCheckpoints[g_iPointsLoaded][2]) g_iPointsLoaded++ } fclose(iFile) } } public SetCheckpoints() { new iEnt new Float:flOrigin[3] for(new i = 0; i < g_iPointsLoaded; i++) { iEnt = create_entity("env_sprite") entity_set_string(iEnt, EV_SZ_classname, CLASSNAME_CHECKPOINT) entity_set_model(iEnt, CHECKPOINT_SPRITE) entity_set_int(iEnt, EV_INT_spawnflags, SF_SPRITE_STARTON) entity_set_float(iEnt, EV_FL_framerate, 30.0) DispatchSpawn(iEnt) flOrigin[0] = float(g_aCheckpoints[i][0]) flOrigin[1] = float(g_aCheckpoints[i][1]) flOrigin[2] = float(g_aCheckpoints[i][2]) entity_set_origin(iEnt, flOrigin) entity_set_size(iEnt, Float:{-CHECKPOINT_SIZE, -CHECKPOINT_SIZE, -CHECKPOINT_SIZE}, Float:{CHECKPOINT_SIZE, CHECKPOINT_SIZE, CHECKPOINT_SIZE}) entity_set_int(iEnt, EV_INT_solid, SOLID_TRIGGER) entity_set_int(iEnt, EV_INT_movetype, MOVETYPE_FLY) entity_set_int(iEnt, EV_INT_rendermode, kRenderTransAdd) entity_set_int(iEnt, EV_INT_iuser1, i) log_amx("i is %i", i) entity_set_float(iEnt, EV_FL_renderamt, 255.0) entity_set_float(iEnt, EV_FL_scale, 1.0) entity_set_float(iEnt, EV_FL_gravity,0.0) g_iPointsSet++ } } public RemoveAllCheckPoints() { new ent = -1 while((ent = find_ent_by_class(ent,CLASSNAME_CHECKPOINT))) { remove_entity(ent) } } public GetNearestCheckpoint(id) { new Float:flDist new Float:flClosestDist = 9999.0 new iClosestEnt = 0 new ent = -1 while((ent = find_ent_by_class(ent,CLASSNAME_CHECKPOINT))) { flDist = entity_range(id, ent) if(flDist < flClosestDist) { iClosestEnt = ent flClosestDist = flDist } } if(iClosestEnt) { log_amx("%i is the #1 closest at %i units", iClosestEnt, floatround(flClosestDist)) return iClosestEnt } return 0 } stock is_user_T(id) { if(get_user_team(id) == 1) return true; return false; }
Private
[
?
]
Run code
Submit