RSSy MYGO.pl Opublikowano Marzec 23, 2023 o 10:00 RSSy Udostępnij Opublikowano Marzec 23, 2023 o 10:00 Hello I am going to increase the zombie speed in a zone area I have two problems The mod has used fw_PlayerPreThink to speed up the zombies Next, I don't know how to recognize that they have left the zone PHP Code: #include <amxmodx> #include <amxmisc> #include <engine> #include <fakemeta> #include <hamsandwich> #define PLUGIN_VERSION "1.0" #define ADMIN_ACCESS ADMIN_RCON #define TASK_SHOWZONES 377737 #define MAXPLAYERS 32 #define isPlayer(%1) ((1 <= %1 && %1 < MAXPLAYERS)) #define ZONE_SPRITE "sprites/laserbeam.spr" #define ZONE_STARTFRAME 1 #define ZONE_FRAMERATE 1 #define ZONE_LIFE 12 #define ZONE_WIDTH 5 #define ZONE_NOISE 0 #define ZONE_COLOR_RED 255 #define ZONE_COLOR_GREEN 0 #define ZONE_COLOR_BLUE 0 #define ZONE_COLOR_SELECTED_RED 0 #define ZONE_COLOR_SELECTED_GREEN random(256) #define ZONE_COLOR_SELECTED_BLUE 255 #define ZONE_BRIGHTNESS 255 #define ZONE_SPEED 0 #define ZONE_VIEWDISTANCE 800.0 #define ZONE_BLOCKEDTEAM 1 // Comment this line to disable the beam when setting points. #define BEAM_ENABLED // Comment a line to disable the sound. #define SOUND_SETPOINT "agrunt/ag_fire2.wav" #define SOUND_SELECT "bullchicken/bc_spithit3.wav" #define SOUND_DELETE "buttons/button10.wav" #define SOUND_DELETEALL "buttons/button11.wav" #define SOUND_TELEPORT "debris/beamstart7.wav" #if defined BEAM_ENABLED #define BEAM_SPRITE "sprites/lgtning.spr" #define BEAM_STARTFRAME 0 #define BEAM_FRAMERATE 10 #define BEAM_LIFE 2 #define BEAM_WIDTH 15 #define BEAM_NOISE 2 #define BEAM_COLOR_RED 255 #define BEAM_COLOR_GREEN 0 #define BEAM_COLOR_BLUE 0 #define BEAM_COLOR_SELECT_RED 0 #define BEAM_COLOR_SELECT_GREEN random(256) #define BEAM_COLOR_SELECT_BLUE 255 #define BEAM_BRIGHTNESS 255 #define BEAM_SPEED 30 new g_iBeamSprite #endif new const g_szPrefix[] = "^4[BB Zones]^1" new const g_szEntString[] = "info_target" new const g_szClassname[] = "BBZone" new g_szDirectory[512], g_szFilename[512], g_szMap[32] new Array:g_aZones new Trie:g_tZones new bool:g_blBuilding[33] new Float:g_flBuildOrigin[33][2][3] new g_iBuildStage[33] new g_iCurrentZone[33][2] new bool:g_blHighlight[33] new g_iZoneSprite new g_iTotalZones new g_iSayText new Float:g_zonesOrigins[50][3] public plugin_init() { register_plugin("BaseBuilder No-Build Zones", PLUGIN_VERSION, "Lucifer") register_cvar("BBZones", PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED) register_dictionary("BBZones.txt") register_clcmd("say /bbzones", "menuZone") register_clcmd("say_team /bbzones", "menuZone") register_clcmd("say /pointir", "selectPoint") register_touch(g_szClassname, "player", "OnTouchZone") get_mapname(g_szMap, charsmax(g_szMap)) strtolower(g_szMap) get_datadir(g_szDirectory, charsmax(g_szDirectory)) add(g_szDirectory, charsmax(g_szDirectory), "/BBZones") formatex(g_szFilename, charsmax(g_szFilename), "%s/%s.txt", g_szDirectory, g_szMap) if(!dir_exists(g_szDirectory)) mkdir(g_szDirectory) g_aZones = ArrayCreate(5, 1) g_tZones = TrieCreate() g_iSayText = get_user_msgid("SayText") fileRead(0) } public OnTouchZone(iZone, id) { if(get_user_team(id) != 1) return set_pev(id, pev_maxspeed, 1000.0) } public plugin_end() { fileRead(1) ArrayDestroy(g_aZones) TrieDestroy(g_tZones) } fileRead(iWrite) { new iFilePointer switch(iWrite) { case 0: { iFilePointer = fopen(g_szFilename, "rt") if(iFilePointer) { new szData[200], szPoint[6][32] new Float:flPoint[2][3] while(!feof(iFilePointer)) { fgets(iFilePointer, szData, charsmax(szData)) trim(szData) if(szData[0] == EOS || szData[0] == ';') continue parse(szData, szPoint[0], charsmax(szPoint[]), szPoint[1], charsmax(szPoint[]), szPoint[2], charsmax(szPoint[]), szPoint[3], charsmax(szPoint[]), szPoint[4], charsmax(szPoint[]), szPoint[5], charsmax(szPoint[])) for(new i; i < 3; i++) flPoint[0][i] = str_to_float(szPoint[i]) for(new i; i < 3; i++) flPoint[1][i] = str_to_float(szPoint[i + 3]) CreateZone(flPoint[0], flPoint[1]) } } } case 1: { delete_file(g_szFilename) if(!g_iTotalZones) return iFilePointer = fopen(g_szFilename, "wt") new szCoords[200], szZone[5], iZone for(new i; i < g_iTotalZones; i++) { iZone = ArrayGetCell(g_aZones, i) num_to_str(iZone, szZone, charsmax(szZone)) TrieGetString(g_tZones, szZone, szCoords, charsmax(szCoords)) fprintf(iFilePointer, "%s^n", szCoords) } } } fclose(iFilePointer) } public selectPoint(id) { if(!g_blBuilding[id]) return PLUGIN_CONTINUE new Float:flPointOrigin[3], flUserOrigin[3] get_user_origin(id, flUserOrigin, 3) IVecFVec(flUserOrigin, flPointOrigin) g_flBuildOrigin[id][g_iBuildStage[id]] = flPointOrigin #if defined SOUND_SETPOINT player_spksound(id, SOUND_SETPOINT) #endif #if defined BEAM_ENABLED draw_beam(id) #endif switch(g_iBuildStage[id]) { case 0: { g_iBuildStage[id]++ ColorChat(id, "%L", LANG_PLAYER, "BBZONE_SET_SECOND") } case 1: { g_iBuildStage[id]-- g_blBuilding[id] = false CreateZone(g_flBuildOrigin[id][0], g_flBuildOrigin[id][1]) ColorChat(id, "%L", LANG_PLAYER, "BBZONE_CREATED") } } menu_reopen(id) return PLUGIN_HANDLED } public menuZone(id) { if(!(get_user_flags(id) & ADMIN_ACCESS)) { //ColorChat(id, "%L", LANG_PLAYER, "BBZONE_NOACCESS") return PLUGIN_HANDLED } new szTitle[128], szItem[64] formatex(szTitle, charsmax(szTitle), "\r%L \d| \y%s \d| \r%i %L", LANG_PLAYER, "BBZONE_BBZONES", g_szMap, g_iTotalZones, LANG_PLAYER, "BBZONE_ZONES") new iMenu = menu_create(szTitle, "handlerZone") formatex(szItem, charsmax(szItem), "%L", LANG_PLAYER, g_blBuilding[id] ? "BBZONE_CANCEL" : "BBZONE_ADD") menu_additem(iMenu, szItem, "") formatex(szItem, charsmax(szItem), "%L", LANG_PLAYER, g_blHighlight[id] ? "BBZONE_HIDE" : "BBZONE_HIGHLIGHT") menu_additem(iMenu, szItem, "") formatex(szItem, charsmax(szItem), "%s%L", g_iTotalZones ? "" : "\d", LANG_PLAYER, "BBZONE_SELECT") menu_additem(iMenu, szItem, "") formatex(szItem, charsmax(szItem), "%s%L", g_iTotalZones && is_zone(g_iCurrentZone[id][0]) ? "" : "\d", LANG_PLAYER, "BBZONE_DELETE") menu_additem(iMenu, szItem, "") formatex(szItem, charsmax(szItem), "%s%L", g_iTotalZones ? "" : "\d", LANG_PLAYER, "BBZONE_DELETEALL") menu_additem(iMenu, szItem, "") formatex(szItem, charsmax(szItem), "%s%L", g_iTotalZones && is_zone(g_iCurrentZone[id][0]) ? "" : "\d", LANG_PLAYER, "BBZONE_TELEPORT") menu_additem(iMenu, szItem, "") menu_display(id, iMenu, 0) return PLUGIN_HANDLED } public handlerZone(id, iMenu, iItem) { if(iItem == MENU_EXIT) { menu_destroy(iMenu) return PLUGIN_HANDLED } switch(iItem) { case 0: { if(g_blBuilding[id]) { g_iBuildStage[id] = 0 g_blBuilding[id] = false ColorChat(id, "%L", LANG_PLAYER, "BBZONE_CANCELED") } else { g_blBuilding[id] = true ColorChat(id, "%L", LANG_PLAYER, "BBZONE_SET_FIRST") } } case 1: { if(g_blHighlight[id]) { g_blHighlight[id] = false remove_task(id + TASK_SHOWZONES) ColorChat(id, "%L", LANG_PLAYER, "BBZONE_HIGHLIGHT_DISABLED") } else { g_blHighlight[id] = true set_task(1.0, "showZones", id + TASK_SHOWZONES, "", 0, "b", 0) ColorChat(id, "%L", LANG_PLAYER, "BBZONE_HIGHLIGHT_ENABLED") } } case 2: { if(g_iTotalZones) { menu_destroy(iMenu) menuSelect(id) return PLUGIN_HANDLED } else noZones(id) } case 3: { if(is_zone(g_iCurrentZone[id][0])) { ColorChat(id, "%L", LANG_SERVER, "BBZONE_REMOVED", g_iCurrentZone[id][0]) player_remove_zone(id) #if defined SOUND_DELETE player_spksound(id, SOUND_DELETE) #endif } else invalidZone(id) } case 4: { if(g_iTotalZones) { new iPlayers[32], iPnum, iEnt get_players(iPlayers, iPnum) while((iEnt = find_ent_by_class(iEnt, g_szClassname))) if(pev_valid(iEnt)) remove_entity(iEnt) for(new i, iPlayer; i < iPnum; i++) { iPlayer = iPlayers[i] g_iCurrentZone[iPlayer][0] = 0 g_iCurrentZone[iPlayer][1] = 0 } g_iTotalZones = 0 ArrayClear(g_aZones) TrieClear(g_tZones) ColorChat(id, "%L", LANG_PLAYER, "BBZONE_REMOVEDALL") #if defined SOUND_DELETEALL player_spksound(id, SOUND_DELETEALL) #endif } else noZones(id) } case 5: { if(is_zone(g_iCurrentZone[id][0])) { new Float:flOrigin[3] pev(g_iCurrentZone[id][0], pev_origin, flOrigin) set_pev(id, pev_origin, flOrigin) ColorChat(id, "%L", LANG_PLAYER, "BBZONE_TELEPORTED", g_iCurrentZone[id][0]) #if defined SOUND_TELEPORT player_emitsound(id, SOUND_TELEPORT) #endif } else invalidZone(id) } } menu_destroy(iMenu) menuZone(id) return PLUGIN_HANDLED } public menuSelect(id) { new szTitle[128], szItem[64], szTemp[32], szZone[5], iZone formatex(szTitle, charsmax(szTitle), "\r%L \d| \y%s \d| \r%i %L", LANG_PLAYER, "BBZONE_BBZONES", g_szMap, g_iTotalZones, LANG_PLAYER, "BBZONE_ZONES") new iMenu = menu_create(szTitle, "handlerSelect") formatex(szItem, charsmax(szItem), "\r%L", LANG_PLAYER, "BBZONE_BACK") menu_additem(iMenu, szItem, "0") formatex(szItem, charsmax(szItem), "\r%L", LANG_PLAYER, "BBZONE_DESELECT") menu_additem(iMenu, szItem, "1") for(new i; i < g_iTotalZones; i++) { iZone = ArrayGetCell(g_aZones, i) num_to_str(iZone, szZone, charsmax(szZone)) formatex(szItem, charsmax(szItem), "%L #%i", LANG_PLAYER, "BBZONE_ZONE", iZone) if(g_iCurrentZone[id][0] == iZone) { formatex(szTemp, charsmax(szTemp), " \y[%L]", LANG_PLAYER, "BBZONE_CURRENT") add(szItem, charsmax(szItem), szTemp) } menu_additem(iMenu, szItem, szZone) } menu_display(id, iMenu, 0) return PLUGIN_HANDLED } public handlerSelect(id, iMenu, iItem) { switch(iItem) { case MENU_EXIT: { menu_destroy(iMenu) return PLUGIN_HANDLED } case 0: { menu_destroy(iMenu) menuZone(id) return PLUGIN_HANDLED } case 1: { g_iCurrentZone[id][0] = 0 ColorChat(id, "%L", LANG_PLAYER, "BBZONE_DESELECTED") menu_destroy(iMenu) menuSelect(id) return PLUGIN_HANDLED } } new szData[6], iName[64], iAccess, iCallback menu_item_getinfo(iMenu, iItem, iAccess, szData, charsmax(szData), iName, charsmax(iName), iCallback) new iKey = str_to_num(szData) g_iCurrentZone[id][0] = iKey g_iCurrentZone[id][1] = iItem - 2 ColorChat(id, "%L", LANG_PLAYER, "BBZONE_SELECTED", iKey) #if defined SOUND_SELECT player_spksound(id, SOUND_SELECT) #endif #if defined BEAM_ENABLED draw_beam(id, iKey) #endif menu_destroy(iMenu) menuSelect(id) return PLUGIN_HANDLED } CreateZone(Float:flFirstPoint[3], Float:flSecondPoint[3]) { new Float:flCenter[3], Float:flSize[3] new Float:flMins[3], Float:flMaxs[3] for(new i; i < 3; i++) { flCenter[i] = (flFirstPoint[i] + flSecondPoint[i]) / 2.0 flSize[i] = get_float_difference(flFirstPoint[i], flSecondPoint[i]) flMins[i] = flSize[i] / -2.0 flMaxs[i] = flSize[i] / 2.0 } new iEnt = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, g_szEntString)) if(pev_valid(iEnt)) { engfunc(EngFunc_SetOrigin, iEnt, flCenter) set_pev(iEnt, pev_classname, g_szClassname) dllfunc(DLLFunc_Spawn, iEnt) set_pev(iEnt, pev_movetype, MOVETYPE_NONE) set_pev(iEnt, pev_solid, SOLID_TRIGGER) entity_set_size(iEnt, flMins, flMaxs) //engfunc(EngFunc_SetSize, iEnt, flMins, flMaxs) } new szCoords[200], szZone[5] formatex(szCoords, charsmax(szCoords), "%f %f %f %f %f %f", flFirstPoint[0], flFirstPoint[1], flFirstPoint[2], flSecondPoint[0], flSecondPoint[1], flSecondPoint[2]) num_to_str(iEnt, szZone, charsmax(szZone)) TrieSetString(g_tZones, szZone, szCoords) ArrayPushCell(g_aZones, iEnt) g_iTotalZones++ } public origin_check(id, ent) { new Float:entCenter[3] new zoneEnt = -1 new Float:zCenter[3] while((zoneEnt = find_ent_by_class(zoneEnt, g_szClassname))) { // Get world center for the entity static Float:flAbsMin[3], Float:flAbsMax[3] pev(ent, pev_absmin, flAbsMin) pev(ent, pev_absmax, flAbsMax) entCenter[0] = (flAbsMin[0] + flAbsMax[0]) * 0.5 entCenter[1] = (flAbsMin[1] + flAbsMax[1]) * 0.5 entCenter[2] = (flAbsMin[2] + flAbsMax[2]) * 0.5 // Get world center for the zone static Float:zAbsMin[3], Float:zAbsMax[3] pev(zoneEnt, pev_absmin, zAbsMin) pev(zoneEnt, pev_absmax, zAbsMax) zCenter[0] = (zAbsMin[0] + zAbsMax[0]) * 0.5 zCenter[1] = (zAbsMin[1] + zAbsMax[1]) * 0.5 zCenter[2] = (zAbsMin[2] + zAbsMax[2]) * 0.5 // Get zone size new Float:zoneSize[3] new Float:entSize[3] pev(zoneEnt, pev_size, zoneSize) pev(ent, pev_size, entSize) new Float:zHalfSize[3] new Float:entHalfSize[3] zHalfSize[0] = zoneSize[0] / 2 zHalfSize[1] = zoneSize[1] / 2 zHalfSize[2] = zoneSize[2] / 2 entHalfSize[0] = entSize[0] / 2 entHalfSize[1] = entSize[1] / 2 entHalfSize[2] = entSize[2] / 2 new Float:maxDistX new Float:maxDistY new Float:maxDistZ maxDistX = zHalfSize[0] + entHalfSize[0] maxDistY = zHalfSize[1] + entHalfSize[1] maxDistZ = zHalfSize[2] + entHalfSize[2] if((zCenter[0] - entCenter[0] > maxDistX) || (zCenter[0] - entCenter[0] < -maxDistX) || (zCenter[1] - entCenter[1] > maxDistY) || (zCenter[1] - entCenter[1] < -maxDistY) || (zCenter[2] - entCenter[2] > maxDistZ) || (zCenter[2] - entCenter[2] < -maxDistZ)) { } else if(!isPlayer(ent)){ //engfunc( EngFunc_SetOrigin, ent, Float:{ -8192.0, -8192.0, -8192.0 } ) set_pev(ent,pev_rendermode,kRenderTransColor) set_pev(ent,pev_rendercolor, Float:{163.0, 1.0, 37.0} ) set_pev(ent,pev_renderamt, 240.0 ) set_task(0.2, "removeEnt", ent) //ColorChat(id, "You are not allowed to build there.") } } } public removeEnt(ent){ Remove(ent) } stock Remove(ent) { set_pev(ent, pev_solid, SOLID_NOT); set_pev(ent, pev_effects, pev(ent, pev_effects) | EF_NODRAW); } public showZones(id) { id -= TASK_SHOWZONES if(!is_user_connected(id)) { remove_task(id + TASK_SHOWZONES) return } new iMins[3], iMaxs[3], iEnt new Float:flUserOrigin[3], Float:flOrigin[3], Float:flMins[3], Float:flMaxs[3] new bool:blCurrentZone pev(id, pev_origin, flUserOrigin) // Save zones origins new zonesCount = 0 // End save zones origins while((iEnt = find_ent_by_class(iEnt, g_szClassname))) { blCurrentZone = (iEnt == g_iCurrentZone[id][0]) ? true : false pev(iEnt, pev_origin, flOrigin) // Save zones origins g_zonesOrigins[zonesCount][0] = flOrigin[0] g_zonesOrigins[zonesCount][1] = flOrigin[1] g_zonesOrigins[zonesCount][2] = flOrigin[2] zonesCount += 1 // End save zones origins if(get_distance_f(flUserOrigin, flOrigin) > ZONE_VIEWDISTANCE) continue pev(iEnt, pev_mins, flMins) pev(iEnt, pev_maxs, flMaxs) flMins[0] += flOrigin[0] flMins[1] += flOrigin[1] flMins[2] += flOrigin[2] flMaxs[0] += flOrigin[0] flMaxs[1] += flOrigin[1] flMaxs[2] += flOrigin[2] /*console_print(0, "Size: %f", flMins[0]) console_print(0, "Size: %f", flMins[1]) console_print(0, "Size: %f", flMins[2])*/ FVecIVec(flMins, iMins) FVecIVec(flMaxs, iMaxs) draw_line(id, blCurrentZone, iMaxs[0], iMaxs[1], iMaxs[2], iMins[0], iMaxs[1], iMaxs[2]) draw_line(id, blCurrentZone, iMaxs[0], iMaxs[1], iMaxs[2], iMaxs[0], iMins[1], iMaxs[2]) draw_line(id, blCurrentZone, iMaxs[0], iMaxs[1], iMaxs[2], iMaxs[0], iMaxs[1], iMins[2]) draw_line(id, blCurrentZone, iMins[0], iMins[1], iMins[2], iMaxs[0], iMins[1], iMins[2]) draw_line(id, blCurrentZone, iMins[0], iMins[1], iMins[2], iMins[0], iMaxs[1], iMins[2]) draw_line(id, blCurrentZone, iMins[0], iMins[1], iMins[2], iMins[0], iMins[1], iMaxs[2]) draw_line(id, blCurrentZone, iMins[0], iMaxs[1], iMaxs[2], iMins[0], iMaxs[1], iMins[2]) draw_line(id, blCurrentZone, iMins[0], iMaxs[1], iMins[2], iMaxs[0], iMaxs[1], iMins[2]) draw_line(id, blCurrentZone, iMaxs[0], iMaxs[1], iMins[2], iMaxs[0], iMins[1], iMins[2]) draw_line(id, blCurrentZone, iMaxs[0], iMins[1], iMins[2], iMaxs[0], iMins[1], iMaxs[2]) draw_line(id, blCurrentZone, iMaxs[0], iMins[1], iMaxs[2], iMins[0], iMins[1], iMaxs[2]) draw_line(id, blCurrentZone, iMins[0], iMins[1], iMaxs[2], iMins[0], iMaxs[1], iMaxs[2]) } } public plugin_precache() { g_iZoneSprite = precache_model(ZONE_SPRITE) #if defined SOUND_SETPOINT precache_sound(SOUND_SETPOINT) #endif #if defined SOUND_SELECT precache_sound(SOUND_SELECT) #endif #if defined SOUND_DELETE precache_sound(SOUND_DELETE) #endif #if defined SOUND_DELETEALL precache_sound(SOUND_DELETEALL) #endif #if defined SOUND_TELEPORT precache_sound(SOUND_TELEPORT) #endif #if defined BEAM_ENABLED g_iBeamSprite = precache_model(BEAM_SPRITE) #endif } menu_reopen(id) { new iNewMenu, iMenu = player_menu_info(id, iMenu, iNewMenu) if(iMenu) { show_menu(id, 0, "^n", 1) menuZone(id) } } #if defined BEAM_ENABLED draw_beam(id, iZone = 0) { new iUserOrigin[3], iPointOrigin[3] get_user_origin(id, iUserOrigin) if(iZone && pev_valid(iZone)) { new Float:flOrigin[3] pev(iZone, pev_origin, flOrigin) FVecIVec(flOrigin, iPointOrigin) } else get_user_origin(id, iPointOrigin, 3) message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(TE_BEAMPOINTS) write_coord(iUserOrigin[0]) write_coord(iUserOrigin[1]) write_coord(iUserOrigin[2]) write_coord(iPointOrigin[0]) write_coord(iPointOrigin[1]) write_coord(iPointOrigin[2]) write_short(g_iBeamSprite) write_byte(BEAM_STARTFRAME) write_byte(BEAM_FRAMERATE) write_byte(BEAM_LIFE) write_byte(BEAM_WIDTH) write_byte(BEAM_NOISE) write_byte(iZone ? BEAM_COLOR_SELECT_RED : BEAM_COLOR_RED) write_byte(iZone ? BEAM_COLOR_SELECT_GREEN : BEAM_COLOR_GREEN) write_byte(iZone ? BEAM_COLOR_SELECT_BLUE : BEAM_COLOR_BLUE) write_byte(BEAM_BRIGHTNESS) write_byte(BEAM_SPEED) message_end() } #endif draw_line(id, bool:blCurrentZone, x1, y1, z1, x2, y2, z2) { message_begin(id ? MSG_ONE_UNRELIABLE : MSG_BROADCAST, SVC_TEMPENTITY, _, id ? id : 0) write_byte(TE_BEAMPOINTS) write_coord(x1) write_coord(y1) write_coord(z1) write_coord(x2) write_coord(y2) write_coord(z2) write_short(g_iZoneSprite) write_byte(ZONE_STARTFRAME) write_byte(ZONE_FRAMERATE) write_byte(ZONE_LIFE) write_byte(ZONE_WIDTH) write_byte(ZONE_NOISE) write_byte(blCurrentZone ? ZONE_COLOR_SELECTED_RED : ZONE_COLOR_RED) write_byte(blCurrentZone ? ZONE_COLOR_SELECTED_GREEN : ZONE_COLOR_GREEN) write_byte(blCurrentZone ? ZONE_COLOR_SELECTED_BLUE : ZONE_COLOR_BLUE) write_byte(ZONE_BRIGHTNESS) write_byte(ZONE_SPEED) message_end() } player_emitsound(id, szSound[]) emit_sound(id, CHAN_ITEM, szSound, 1.0, ATTN_NORM, 0, PITCH_NORM) player_spksound(id, szSound[]) client_cmd(id, "spk %s", szSound) noZones(id) ColorChat(id, "%L", LANG_PLAYER, "BBZONE_NOZONES") invalidZone(id) ColorChat(id, "%L", LANG_PLAYER, "BBZONE_INVALID") player_remove_zone(id) { new szZone[5] num_to_str(g_iCurrentZone[id][0], szZone, charsmax(szZone)) ArrayDeleteItem(g_aZones, g_iCurrentZone[id][1]) TrieDeleteKey(g_tZones, szZone) remove_entity(g_iCurrentZone[id][0]) g_iCurrentZone[id][0] = 0 g_iCurrentZone[id][1] = 0 g_iTotalZones-- } bool:is_zone(iEnt) { if(!pev_valid(iEnt)) return false new szClass[32] pev(iEnt, pev_classname, szClass, charsmax(szClass)) return equal(szClass, g_szClassname) ? true : false } Float:get_float_difference(Float:flNumber1, Float:flNumber2) return (flNumber1 > flNumber2) ? (flNumber1 - flNumber2) : (flNumber2 - flNumber1) ColorChat(const id, const szInput[], any:...) { new iPlayers[32], iCount = 1 static szMessage[191] vformat(szMessage, charsmax(szMessage), szInput, 3) format(szMessage[0], charsmax(szMessage), "%s %s", g_szPrefix, szMessage) replace_all(szMessage, charsmax(szMessage), "!g", "^4") replace_all(szMessage, charsmax(szMessage), "!n", "^1") replace_all(szMessage, charsmax(szMessage), "!t", "^3") if(id) iPlayers[0] = id else get_players(iPlayers, iCount, "ch") for(new i; i < iCount; i++) { if(is_user_connected(iPlayers[i])) { message_begin(MSG_ONE_UNRELIABLE, g_iSayText, _, iPlayers[i]) write_byte(iPlayers[i]) write_string(szMessage) message_end() } } } Przeczytaj cały wpis Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi