Offline |
|
|
Csatlakozott: 2014.05.01. 13:18 Hozzászólások: 628
Megköszönt másnak: 61 alkalommal Megköszönték neki: 105 alkalommal
|
demon írta: Gondolom azt a plugint használod amit régen írtan neked. #include <amxmodx> #include <amxmisc> #include <fakemeta> #include <engine> #define PLUGIN "Breakable ent editor" #define VERSION "1.0" #define AUTHOR "Demon" new ents[100][32], g_total; new g_save_file[200]; public plugin_precache() { get_configsdir(g_save_file, 199); add(g_save_file, 199, "/edited_ents", 0); if( !dir_exists(g_save_file) ) mkdir(g_save_file); new map[64]; get_mapname(map, 63); strtolower(map); format(g_save_file, 199, "%s/%s.txt", g_save_file, map); LoadEntities(); return PLUGIN_CONTINUE; } public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR); register_clcmd("e_edit", "CmdEdit", ADMIN_KICK, "-- breakable entity szerkesztes"); register_concmd("e_reset", "CmdReset", ADMIN_KICK, "-- osszes entity visszaallitas"); register_event("HLTV", "EventNewRound", "a", "1=0", "2=0"); register_logevent("EventNewRound", 2, "1=Round_Start"); } public EventNewRound() { set_task(1.5, "convert_ents"); } public convert_ents() { for(new i; i < g_total; i++) { new ent = find_ent_by_model(-1, "func_breakable", ents[i]); if(ent > 0) set_pev(ent, pev_classname, "func_wall"); } } public CmdEdit(plr, level, cid) { if(!cmd_access(plr, level, cid, 1)) return PLUGIN_HANDLED; new ent = GetAimAtEnt(plr); if(pev_valid(ent)) { static classname[64]; pev(ent, pev_classname, classname, 63); if(!equali(classname, "func_breakable")) { print_color(plr, "!gA nA©zett entity nem func_breakable entity."); return PLUGIN_HANDLED; } new model[32]; pev(ent, pev_model, model, 31); set_pev(ent, pev_classname, "func_wall"); copy(ents[g_total], 31, model); g_total++; SaveEntities(); print_color(plr, "!gA nA©zett entity sikeresen szerkesztve lett."); } return PLUGIN_HANDLED; } public CmdReset(plr, level, cid) { if(!cmd_access(plr, level, cid, 1)) return PLUGIN_HANDLED; g_total = 0; if(file_exists(g_save_file)) delete_file(g_save_file); console_print(plr, "Az osszes szerkesztett entity mapvaltas utan visszaall az eredeti adatokra."); return PLUGIN_HANDLED; } LoadEntities() { if(file_exists(g_save_file)) { g_total = 0; new f = fopen(g_save_file, "rt"); new data[36], model[32]; while(!feof(f)) { fgets(f, data, 35); parse(data, model, 31); copy(ents[g_total], 31, model); g_total++; } fclose(f); return 1; } return 0; } SaveEntities() { if(file_exists(g_save_file)) delete_file(g_save_file); new f = fopen(g_save_file, "wt"); new data[36]; for(new i = 0; i < g_total; i++) { formatex(data, 35, "^"%s^"^n", ents[i]); fputs(f, data); } fclose(f); return 1; } GetAimAtEnt(plr) { static Float:start[3], Float:view_ofs[3], Float:dest[3], i; pev(plr, pev_origin, start); pev(plr, pev_view_ofs, view_ofs); for( i = 0; i < 3; i++ ) start[i] += view_ofs[i]; pev(plr, pev_v_angle, dest); engfunc(EngFunc_MakeVectors, dest); global_get(glb_v_forward, dest); for( i = 0; i < 3; i++ ) { dest[i] *= 9999.0; dest[i] += start[i]; } engfunc(EngFunc_TraceLine, start, dest, DONT_IGNORE_MONSTERS, plr, 0); return get_tr2(0, TR_pHit); } stock print_color(const id, const input[], any:...) { new count = 1, players[32]; static msg[191]; vformat(msg, 190, input, 3); replace_all(msg, 190, "!g", "^4"); replace_all(msg, 190, "!y", "^1"); replace_all(msg, 190, "!t", "^3"); if (id) players[0] = id; else get_players(players, count, "ch"); { for (new i = 0; i < count; i++) { if (is_user_connected(players[i])) { message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]); write_byte(players[i]); write_string(msg); message_end(); } } } return PLUGIN_HANDLED; }
Különbség a 2 plugin között, hogy itt van egy kis késleltetési idő körkezdés után, ami arra szükséges, hogy legyen ideje leswpannolni az entitynek és utána alakítja át func_wall-ra. Megint téma lett. Most ennek minden körben be kell állítania, hogy func_wall-ra változzon, mert amúgy körönként resetelődik?
|
|