Skocz do zawartości

Nowy szablon forum

mygo.pl

Stworzyliśmy dla Was nowy wygląd forum. Z pewnością znajdziesz rzeczy, które wg Ciebie mogą zostać zmienione - wspomnij o tym w specjalnym wątku.

Czytaj więcej

Jak założyć własną sieć

serwerów CS

Zastanawiasz się nad prowadzeniem własnej sieci serwerów? Przeczytaj podstawowe informacje, na które należy zwrócić uwagę, przy takim projekcie.

Czytaj więcej

Tworzymy spis sieci

dodaj swoją

Dodaj sieć do której należysz, pozwoli to na promocję i budowę ogólnopolskiej bazy sieci CS.

Czytaj więcej

MYGO.pl

RSSy
  • Postów

    28164
  • Dołączył

  • Ostatnia wizyta

    nigdy
  • Wygrane w rankingu

    11

Treść opublikowana przez MYGO.pl

  1. Hey ! Im running a plugin on my Half-Life server which adds +5 HP & +5 AP to a killer (upon getting a successful kill). The plugin works great, but for new players it's not that obvious that this feature even exists. It would be nice if someone could edit it so that the plugin would display a message just under the crosshair (or in that general area) "+5 HP & +5 AP !" whenever a player gets a kill, also a line in the code for a color code for that message would be nice as I'd like to customize it to my desire. Thank you ! Attached Files Get Plugin or Get Source (vampire.sma - 1.2 KB) Przeczytaj cały wpis
  2. I remember there was this Healing Box plugin: A healing box would appear on the map, either in the CT/TR zone or in the middle of the map, even if requested, a player with HP below 40 could go over this Healing Box and automatically recover "X" life. . The Healing Box appears on the map X times. There was an editable file, which you could edit, sometimes this healing box would appear in the round, edit how much HP you could get from this healing box and also edit the amount of HP it regenerated. Does anyone have this plugin or something like that for download? Przeczytaj cały wpis
  3. So, whenever someone has selected the cerberus class a message gets sent, which is good. But when they are nemesis and they also have selected cerberus class the message gets sent, which i dont want. Could anyone help? I use ZP 4.3 . The Tesla class works, I tried doing it the same way but it doesnt work PHP Code: public zp_user_infected_post(id, infector) { if (zp_get_user_zombie_class(id) == g_cerberus) { ColorChat(id, GREEN, "^x04[SPK ZM]^x01 [Ability: %d Fury | Cooldown: 1 round]", get_pcvar_num(cvar_fury)) g_veces[id] = get_pcvar_num(cvar_fury) i_fury_time[id] = get_pcvar_num(cvar_furytime) emit_sound(id, CHAN_STREAM, idle, 1.0, ATTN_NORM, 0, PITCH_HIGH) remove_task(id) } { if (g_cerberus == zp_get_user_zombie_class(id) && !zp_get_user_nemesis(id)) ColorChat(id, GREEN, "^x04[SPK ZM]^x01 Test", get_pcvar_num(cvar_fury)) } } Tesla one ( works good ) PHP Code: public zp_user_infected_post(id, infector) { reset_cvars(id) if (g_zclass_energyball == zp_get_user_zombie_class(id)) { ChatColor(id, "!g[SPK ZM] !y%L",id,"TESLA_INFO11"); } { if (g_zclass_energyball == zp_get_user_zombie_class(id) && !zp_get_user_nemesis(id)) emit_sound(id, CHAN_VOICE, g_Classic_Infect_Sound[random(sizeof g_Classic_Infect_Sound)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM) } } Przeczytaj cały wpis
  4. https://heylink.me/opaltogel.ai/ https://bit.ly/m/opaltogel OPALTOGEL merupakan situs bandar online nomor satu yang terpercaya di Indonesia. Dikenal dengan layanan terbaik dan keamanan yang terjamin, OPALTOGEL menjadi pilihan utama para pecinta judi online. Dengan berbagai jenis permainan yang disediakan seperti togel, slot, casino, sportsbook, dan poker, OPALTOGEL mampu memenuhi kebutuhan para pemain judi online dengan baik. OPALTOGEL juga dikenal dengan kemudahan aksesnya melalui OPALTOGEL login yang cepat dan mudah. Para pemain dapat mengakses situs ini kapan saja dan di mana saja melalui perangkat komputer atau smartphone mereka. Selain itu, OPALTOGEL juga menyediakan berbagai opsi pembayaran yang aman dan terjamin keamanannya. LINK ALTERNATIF: https://longkeith.com/ Bagi para pemain yang mengalami kendala dalam mengakses situs utama, OPALTOGEL juga menyediakan OPALTOGEL alternatif yang dapat diakses dengan mudah melalui link alternatif yang disediakan. Dengan demikian, para pemain tetap dapat menikmati berbagai jenis permainan yang disediakan oleh OPALTOGEL tanpa adanya hambatan. Sebagai situs online terpercaya, OPALTOGEL juga memberikan jaminan keamanan data pribadi para pemain serta transaksi keuangan yang dilakukan. Dengan sistem keamanan yang canggih, para pemain dapat bermain dengan nyaman dan tenang tanpa perlu khawatir akan kebocoran data pribadi atau transaksi yang tidak aman. Dengan reputasi yang baik dan layanan terbaik yang ditawarkan, tidak heran jika OPALTOGEL menjadi situs bandar online terpercaya nomor satu di Indonesia. Bagi para pecinta judi online, OPALTOGEL adalah pilihan yang tepat untuk menikmati pengalaman bermain judi online yang aman, nyaman, dan menguntungkan. Wyświetl pełny artykuł
  5. Descriptionmanager for 4v4 survival arena mode. the team will win the game if another team all inacp/dead earlier. current support translation: chi(Simplified Chinese). I won't add more translations, you could make your own or ask another one. requirementsSurvivor 4v4 Arena(PVPVE Coop) Related PluginsBot Takeover Customized version for 4v4 Survival Arena Playable Demo Commandssm_arenateam :swap to the opponent team Change log Spoiler Code: 1.0 (2024-03-09: -init public release. Attached Files survival.phrases.txt (1.1 KB) Get Plugin or Get Source (survival.sp - 7.8 KB) Wyświetl pełny artykuł
  6. Descriptionallow human survivors takeover another valid bot by observing it and press shift button after death. suggest only use this plugin in modes disabled rescue. current support translation: chi(Simplified Chinese). I won't add more translations, you could make your own or ask another one. requirementsLeft 4 DHooks Direct Related Cvars And Pluginssm_cvar allow_all_bot_survivor_team "1" Auto Enable/Disable "sb_all_bot_game" Cvars PHP Code: // 1 = enable, 0 = disable. required at least 1 survivor still not incapacitated to try to takeover bot? // - // Default: "1" bot_takeover_alright "1" Change log Spoiler Code: 2.0 (2024-03-09: -init public release. Attached Files bot_takeover.phrases.txt (521 Bytes) bot_takeover.inc (663 Bytes) Get Plugin or Get Source (bot_takeover.sp - 8.0 KB) Wyświetl pełny artykuł
  7. May anyone help me make this for only a flag ( ADMIN_LEVEL_D) ? I know its zp user infected but i tried several times and failed. PHP Code: public zp_user_infected_post(id, infector) { if (zp_get_user_zombie_class(id) == g_cerberus) { client_print(id, print_chat, "[SPK ZM] [Ability: %d Fury | Cooldown: 1 round]", get_pcvar_num(cvar_fury)) g_veces[id] = get_pcvar_num(cvar_fury) i_fury_time[id] = get_pcvar_num(cvar_furytime) emit_sound(id, CHAN_STREAM, idle, 1.0, ATTN_NORM, 0, PITCH_HIGH) remove_task(id) } } FULL CODE PHP Code: #include <amxmodx> #include <zombieplague> #include <engine> #include <fun> #include <fakemeta> #include <hamsandwich> #define ID_FURY (taskid - TASK_FURY) // Task offsets enum (+= 100) { TASK_FURY } /*================================================================================ [Customizations] =================================================================================*/ // Zombie Attributes new const zclass10_name[] = { "Cerberus Dog"} new const zclass10_info[] = { "You have a fury" } new const zclass10_model[] = { "Cerberus_frk_14" } new const zclass10_clawmodel[] = { "v_doghands.mdl" } const zclass10_health = 1200 const zclass10_speed = 275 const Float:zclass10_gravity = 0.8 const Float:zclass10_knockback = 0.5 new const idle[] = "zombie_plague/cerberus_idle.wav" new const fury[] = "zombie_plague/cerberus_fury.wav" new const normaly[] = "zombie_plague/cerberus_normaly.wav" /*================================================================================ Customization ends here! Any edits will be your responsibility =================================================================================*/ // Plugin info. #define PLUGIN "[ZP] Zombie Class: Cerberus Dog" #define VERSION "0.1" #define AUTHOR "DJHD!" // Variables new g_cerberus, g_veces[33], i_fury_time[33], g_maxplayers // Cvar Pointers new cvar_fury, cvar_furytime /*================================================================================ [Init, CFG and Precache] =================================================================================*/ public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) cvar_fury = register_cvar("zp_cerberus_fury", "1") cvar_furytime = register_cvar("zp_cerberus_fury_time", "30„.0") static szCvar[30] formatex(szCvar, charsmax(szCvar), "v%s by %s", VERSION, AUTHOR) register_cvar("zp_zclass_cerberus", szCvar, FCVAR_SERVER|FCVAR_SPONLY) register_logevent("roundStart", 2, "1=Round_Start") register_forward(FM_PlayerPreThink, "fw_PlayerPreThink") g_maxplayers = get_maxplayers() } public plugin_precache() { g_cerberus = zp_register_zombie_class(zclass10_name, zclass10_info, zclass10_model, zclass10_clawmodel, zclass10_health, zclass10_speed, zclass10_gravity, zclass10_knockback) precache_sound(idle) precache_sound(fury) precache_sound(normaly) } /*================================================================================ [Zombie Plague Forwards] =================================================================================*/ public zp_user_infected_post(id, infector) { if (zp_get_user_zombie_class(id) == g_cerberus) { client_print(id, print_chat, "[SPK ZM] [Ability: %d Fury | Cooldown: 1 round]", get_pcvar_num(cvar_fury)) g_veces[id] = get_pcvar_num(cvar_fury) i_fury_time[id] = get_pcvar_num(cvar_furytime) emit_sound(id, CHAN_STREAM, idle, 1.0, ATTN_NORM, 0, PITCH_HIGH) remove_task(id) } } public zp_user_humanized_post(taskid) { new id = ID_FURY remove_task(id+TASK_FURY) set_user_godmode(id, 0) } /*================================================================================ [Main Forwards] =================================================================================*/ public fw_PlayerPreThink(id) { if (!is_user_alive(id)) return FMRES_IGNORED new button = get_user_button(id) new oldbutton = get_user_oldbutton(id) if (zp_get_user_zombie(id) && (zp_get_user_zombie_class(id) == g_cerberus)) { if (!(oldbutton & IN_RELOAD) && (button & IN_RELOAD)) clcmd_furia(id) } return PLUGIN_CONTINUE } /*================================================================================ [Internal Functions] =================================================================================*/ public clcmd_furia(taskid) { new id = ID_FURY if(!is_user_alive(id) || !is_user_connected(id)|| !zp_get_user_zombie(id) || zp_get_user_nemesis(id) || zp_get_user_zombie_class(id) != g_cerberus) return PLUGIN_HANDLED if(g_veces[id] > 0) { g_veces[id] = g_veces[id] -1 set_task(0.1, "effects", id+TASK_FURY, _, _, "b") i_fury_time[id] = get_pcvar_num(cvar_furytime) set_task(1.0, "ShowHUD", id+TASK_FURY, _, _, "a", i_fury_time[id]) emit_sound(id, CHAN_STREAM, fury, 1.0, ATTN_NORM, 0, PITCH_HIGH) } else { return PLUGIN_HANDLED } return PLUGIN_HANDLED } public effects(id) { if(!is_user_alive(id) || !is_user_connected(id)|| !zp_get_user_zombie(id) || zp_get_user_nemesis(id) || zp_get_user_zombie_class(id) != g_cerberus) return static origin[3] get_user_origin(id, origin) message_begin(MSG_PVS, SVC_TEMPENTITY, origin) write_byte(TE_PARTICLEBURST) // TE id write_coord(origin[0]) // x write_coord(origin[1]) // y write_coord(origin[2]) // z write_short(130) // radius write_byte(70) // color write_byte(3) // duration (will be randomized a bit) message_end() message_begin(MSG_PVS, SVC_TEMPENTITY, origin) write_byte(TE_DLIGHT) // TE id write_coord(origin[0]) // x write_coord(origin[1]) // y write_coord(origin[2]) // z write_byte(22) // radius write_byte(255) // r write_byte(0) // g write_byte(30) // b write_byte(2) // life write_byte(0) // decay rate message_end() set_user_godmode(id, 1) set_task(get_pcvar_float(cvar_furytime), "remove_fury", id) } public ShowHUD(id) { if(is_user_alive(id)) { i_fury_time[id] = i_fury_time[id] - 1; set_hudmessage(200, 100, 0, -1.0, -0.46, 0, 1.0, 1.1, 0.0, 0.0, -1) show_hudmessage(id, "Fury: %d", i_fury_time[id]+1) } else { remove_task(id+TASK_FURY) } } public remove_fury(taskid) { new id = ID_FURY remove_task(id+TASK_FURY) set_user_godmode(id, 0) emit_sound(id, CHAN_STREAM, normaly, 1.0, ATTN_NORM, 0, PITCH_HIGH) } public roundStart() { for(new i = 1; i <= g_maxplayers; i++) { i_fury_time[i] = get_pcvar_num(cvar_furytime) remove_task(i) } } Przeczytaj cały wpis
  8. https://forums.alliedmods.net/showthread.php?t=55245 Hello! Can someone add an extra zone option? The point would be that there would be an AFK zone and whoever is in the zone would be put into spectator mode after 30 seconds. Przeczytaj cały wpis
  9. Descriptiondivide the survivors into two teams according to the model: yellow and green. can't revive/heal/defib across team. bot wont' try to liberate besieged or give pills across team. you'd better use auto respawn plugins and self revive plugins. current support translation: chi(Simplified Chinese). I won't add more translations, you could make your own or ask another one. requirementsActions Left 4 DHooks Direct superversus1.8.15.5-modify survivor_chat_select Change log Spoiler Code: 1.0 test (2024-03-08: -init public release. Attached Files 4v4_arena.phrases.txt (708 Bytes) Get Plugin or Get Source (4v4_arena.sp - 12.5 KB) Wyświetl pełny artykuł
  10. Hey ! I'll forward my post here from aghl.ru in the hopes to reach more potential people who'd be able to assist me as I suspect there is a broken part of the code or something similar of that nature: I have an issue with this plugin, in particular, the tripmines. To my knowledge, when placing a tripmine with a secondary attack, it should emit a different laser beam and not the same one as with the primary attack. Im saying that because I've been in 8 different servers which had Severian's Mod, and whenever you'd place a tripmine using MOUSE2 in those servers, not only it would do 150% damage compared to MOUSE1, but the laser beam would look completely different, indicating that its a more potent tripmine. But when I installed this plugin into my server, both attacks work correctly in terms of damage dealt when triggered, secondary attack does 150% damage as it should, but the laser beam when the tripmine is deployed using the secondary attack is the same one as the primary attack's laser, which is the default Half-Life laser beam look. Even in the plugin's description, they are describing the tripmine (when placed with a secondary attack) as a "lightning" mine, quoted: * "Tripmines, when right-clicked, will place a 'lightning' mine which will blow up with 150% of the damage of a regular mine." I will now attach a photo/.gif to visually show what I mean: Primary attack tripmine laser beam look: https://i.imgur.com/fgV1tqX.jpeg Secondary attack tripmine laser beam (how it should look like): https://i.imgur.com/HOKDNBy.gif As you can see, it looks like "lightning" and is animated. (In-game, the beam is "moving" a lot faster, it just appears this slow in the .gif because of the capped FPS) I'd like to add that I have a separate plugin, which makes the tripmine laser beam random color, not just the default green, also the mine itself glows. This has nothing to do with Severian's mod :good: A link to the plugin: https://aghl.ru/forum/viewtopic.php?f=19&t=528 Thanks ! Przeczytaj cały wpis
  11. Hi there, may anyone add to this rocket any "jumping action" on zombies when they get bombed as you can see in the following video: (https://youtu.be/rx4BfGXIa7Y?si=Oy8Ib6NNGoM9tIOs) PHP Code: #include <amxmodx> #include <amxmisc> #include <fakemeta> #include <hamsandwich> #include <zombieplague> static const plugin[] = "[ZP] Extra Item: Original Rocket"; static const mrocket[] = "models/rocket_missile.mdl"; static const mrpg_w[] = "models/v_originalrocket.mdl"; static const mrpg_v[] = "models/v_originalrocket.mdl"; static const mrpg_p[] = "models/p_originalrocket.mdl"; static const sfire[] = "weapons/rocketfire1.wav"; static const sfly[] = "weapons/nuke_fly.wav"; static const shit[] = "weapons/mortarhit.wav"; static const spickup[] = "items/gunpickup2.wav"; static const g_item_name[] = "Original Rocket"; const g_item_cost = 25; new g_itemid; new gmsg_screenshake, gmsg_death, gmsg_damage, pcvar_delay, pcvar_maxdmg, pcvar_radius, pcvar_map; new rocketsmoke, explosion, bazsmoke, white; new bool:has_baz[33], bool:CanShoot[33]; new dmgcount[33], pcvar_dmgforpacks, pcvar_award; public plugin_init() { register_plugin(plugin, "0.6", "Random1"); pcvar_delay = register_cvar("zp_baz_delay", "10.0"); pcvar_maxdmg = register_cvar("zp_baz_dmg", "500"); pcvar_radius = register_cvar("zp_baz_radius", "750"); pcvar_map = register_cvar("zp_baz_map", "0"); pcvar_dmgforpacks = get_cvar_pointer("zp_human_damage_reward"); pcvar_award = register_cvar("zp_baz_awardpacks", "1"); if ( pcvar_dmgforpacks == 0 ) { set_pcvar_num(pcvar_award, 0); //if we couldn't read the dmg cvar from zp then set a stop state on dmg reward log_amx("[%s] error reading zp_human_damage_reward cvar from zombie plague, turning award for damage off", plugin); } g_itemid = zp_register_extra_item(g_item_name, g_item_cost, ZP_TEAM_HUMAN); register_concmd("zp_bazooka", "give_bazooka", ADMIN_KICK, "<name/@all> gives a bazooka to the spcified target"); register_event("CurWeapon","switch_to_knife","be","1=1","2=29"); register_event("HLTV", "event_HLTV", "a", "1=0", "2=0") // New Round register_clcmd("drop", "drop_call"); //supports 2 methods of firing, attacking while holding knife and a bind register_clcmd("baz_fire", "fire_call"); register_forward(FM_PlayerPreThink, "fw_prethink"); register_forward(FM_Touch, "fw_touch"); gmsg_screenshake = get_user_msgid("ScreenShake"); gmsg_death = get_user_msgid("DeathMsg"); gmsg_damage = get_user_msgid("Damage"); } public event_HLTV() { //remove entities regardless of cvar new rpg_temp = engfunc(EngFunc_FindEntityByString, -1, "classname", "rpg_temp"); while( rpg_temp > 0) { engfunc(EngFunc_RemoveEntity, rpg_temp); rpg_temp = engfunc(EngFunc_FindEntityByString, -1, "classname", "rpg_temp"); } if ( get_pcvar_num(pcvar_map) ) return; for( new id = 1; id <= 32; id++ ) has_baz[id] = false; } public zp_extra_item_selected(player, itemid) { if (itemid == g_itemid) { if ( has_baz[player] ) { zp_set_user_ammo_packs( player, zp_get_user_ammo_packs(player) + g_item_cost ); client_print(player, print_chat, "[ZP BAZ] You already have a bazooka, drop it first by hitting you drop key while holding knife"); } else { has_baz[player] = true; CanShoot[player] = true; client_print(player, print_chat, "[ZP BAZ] You now have a bazooka, attack while holding knife(will take %2.1f seconds to reload", get_pcvar_float(pcvar_delay)); } } } public give_bazooka(id,level,cid) { if (!cmd_access(id,level,cid,1)) { console_print(id,"You have no access to that command"); return; } if (read_argc() > 2) { console_print(id,"Too many arguments supplied."); return; } new arg1[32]; read_argv(1, arg1, sizeof(arg1) - 1); new player = cmd_target(id, arg1, 10); if ( !player ) { if ( arg1[0] == '@' ) { for ( new i = 1; i <= 32; i++ ) { if ( is_user_connected(i) && !has_baz[i] && !zp_get_user_zombie(i) ) { has_baz[i] = true; CanShoot[i] = true; client_print(i, print_chat, "[ZP BAZ] You now have a bazooka, attack while holding knife(will take %2.1f seconds to reload", get_pcvar_float(pcvar_delay)); } } } else { client_print(id, print_chat, "No Such Player/Team"); return; } } else if ( !has_baz[player] && !zp_get_user_zombie(player) ) { has_baz[player] = true; CanShoot[player] = true; client_print(player, print_chat, "[ZP BAZ] You now have a bazooka, attack while holding knife(will take %2.1f seconds to reload", get_pcvar_float(pcvar_delay)); } } public zp_user_infected_post(id, infector) if ( has_baz[id] ) drop_rpg_temp(id); public plugin_precache() { precache_model(mrocket); precache_model(mrpg_w); precache_model(mrpg_v); precache_model(mrpg_p); precache_sound(sfire); precache_sound(sfly); precache_sound(shit); precache_sound(spickup); rocketsmoke = precache_model("sprites/smoke.spr"); explosion = precache_model("sprites/zerogxplode.spr"); } public switch_to_knife(id) { if ( !is_user_alive(id) ) return; if ( has_baz[id] && CanShoot[id] ) { set_pev(id, pev_viewmodel2, mrpg_v); set_pev(id, pev_weaponmodel2, mrpg_p); } } public fw_prethink(id) { static button; button = pev(id, pev_button); if ( button & IN_ATTACK ) fire_call(id); } public fire_call(id) { if ( !is_user_alive(id) || !has_baz[id] || !CanShoot[id] ) return; new weapon = get_user_weapon(id); if ( weapon == CSW_KNIFE ) fire_rocket(id); } fire_rocket(id) { if ( !CanShoot[id] ) return; CanShoot[id] = false; set_task(get_pcvar_float(pcvar_delay), "rpg_reload", id); engclient_cmd(id, "weapon_knife"); //attempt to force model to reset new Float:StartOrigin[3], Float:Angle[3]; pev(id, pev_origin, StartOrigin); pev(id, pev_angles, Angle); new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target")); set_pev(ent, pev_classname, "rpgrocket"); engfunc(EngFunc_SetModel, ent, mrocket); set_pev(ent, pev_mins, {-1.0, -1.0, -1.0}); set_pev(ent, pev_maxs, {1.0, 1.0, 1.0}); engfunc(EngFunc_SetOrigin, ent, StartOrigin); set_pev(ent, pev_angles, Angle); set_pev(ent, pev_solid, 2); set_pev(ent, pev_movetype, 5); set_pev(ent, pev_owner, id); new Float:nVelocity[3]; velocity_by_aim(id, 1500, nVelocity); set_pev(ent, pev_velocity, nVelocity); emit_sound(ent, CHAN_WEAPON, sfire, VOL_NORM, ATTN_NORM, 0, PITCH_NORM); emit_sound(ent, CHAN_VOICE, sfly, VOL_NORM, ATTN_NORM, 0, PITCH_NORM); message_begin(MSG_BROADCAST, SVC_TEMPENTITY); write_byte(22); write_short(ent); write_short(rocketsmoke); write_byte(30); write_byte(3); write_byte(255); write_byte(255); write_byte(255); write_byte(255); message_end(); } //--------------------------------------------------------------------------------------- public rpg_reload(id) { CanShoot[id] = true; if ( get_user_weapon(id) == CSW_KNIFE ) switch_to_knife(id); //sets our model } //--------------------------------------------------------------------------------------- public fw_touch(ent, touched) { if ( !pev_valid(ent) ) return FMRES_IGNORED; static entclass[32]; pev(ent, pev_classname, entclass, 31); if ( equali(entclass, "rpg_temp") ) { static touchclass[32]; pev(touched, pev_classname, touchclass, 31); if ( !equali(touchclass, "player") ) return FMRES_IGNORED; if( !is_user_alive(touched) || zp_get_user_zombie(touched) ) return FMRES_IGNORED; emit_sound(touched, CHAN_VOICE, spickup, 1.0, ATTN_NORM, 0, PITCH_NORM); has_baz[touched] = true; engfunc(EngFunc_RemoveEntity, ent); return FMRES_HANDLED; } else if ( equali(entclass, "rpgrocket") ) { new Float:EndOrigin[3]; pev(ent, pev_origin, EndOrigin); new NonFloatEndOrigin[3]; NonFloatEndOrigin[0] = floatround(EndOrigin[0]); NonFloatEndOrigin[1] = floatround(EndOrigin[1]); NonFloatEndOrigin[2] = floatround(EndOrigin[2]); emit_sound(ent, CHAN_WEAPON, shit, VOL_NORM, ATTN_NORM, 0, PITCH_NORM); emit_sound(ent, CHAN_VOICE, shit, VOL_NORM, ATTN_NORM, 0, PITCH_NORM); message_begin(MSG_BROADCAST, SVC_TEMPENTITY); write_byte(17); write_coord(NonFloatEndOrigin[0]); write_coord(NonFloatEndOrigin[1]); write_coord(NonFloatEndOrigin[2] + 128); write_short(explosion); write_byte(60); write_byte(255); message_end(); message_begin(MSG_BROADCAST, SVC_TEMPENTITY); write_byte(5); write_coord(NonFloatEndOrigin[0]); write_coord(NonFloatEndOrigin[1]); write_coord(NonFloatEndOrigin[2] + 256); write_short(bazsmoke); write_byte(125); write_byte(5); message_end(); new maxdamage = get_pcvar_num(pcvar_maxdmg); new damageradius = get_pcvar_num(pcvar_radius); new PlayerPos[3], distance, damage; for (new i = 1; i <= 32; i++) { if ( is_user_alive(i)) { new id = pev(ent, pev_owner) if ((zp_get_user_zombie(id)) || (zp_get_user_nemesis(id))) if ((zp_get_user_zombie(i)) || (zp_get_user_nemesis(i))) continue; if ((!zp_get_user_zombie(id)) && (!zp_get_user_nemesis(id))) if ((!zp_get_user_zombie(i)) && (!zp_get_user_nemesis(i))) continue; get_user_origin(i, PlayerPos); distance = get_distance(PlayerPos, NonFloatEndOrigin); if (distance <= damageradius) { message_begin(MSG_ONE, gmsg_screenshake, {0,0,0}, i); write_short(1<<14); write_short(1<<14); write_short(1<<14); message_end(); damage = maxdamage - floatround(floatmul(float(maxdamage), floatdiv(float(distance), float(damageradius)))); new attacker = pev(ent, pev_owner); baz_damage(i, attacker, damage, "bazooka"); } } } message_begin(MSG_BROADCAST, SVC_TEMPENTITY); write_byte(21); write_coord(NonFloatEndOrigin[0]); write_coord(NonFloatEndOrigin[1]); write_coord(NonFloatEndOrigin[2]); write_coord(NonFloatEndOrigin[0]); write_coord(NonFloatEndOrigin[1]); write_coord(NonFloatEndOrigin[2] + 320); write_short(white); write_byte(0); write_byte(0); write_byte(16); write_byte(128); write_byte(0); write_byte(255); write_byte(255); write_byte(192); write_byte(128); write_byte(0); message_end(); engfunc(EngFunc_RemoveEntity, ent); return FMRES_HANDLED; } return FMRES_IGNORED; } //--------------------------------------------------------------------------------------- public drop_call(id) { if ( has_baz[id] && get_user_weapon(id) == CSW_KNIFE ) { drop_rpg_temp(id); return PLUGIN_HANDLED; //attempt to block can't drop knife message } return PLUGIN_CONTINUE; } drop_rpg_temp(id) { new Float:fAim[3] , Float:fOrigin[3]; velocity_by_aim(id , 64 , fAim); pev(id , pev_origin , fOrigin); fOrigin[0] += fAim[0]; fOrigin[1] += fAim[1]; new rpg = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target")); set_pev(rpg, pev_classname, "rpg_temp"); engfunc(EngFunc_SetModel, rpg, mrpg_w); set_pev(rpg, pev_mins, { -16.0, -16.0, -16.0 } ); set_pev(rpg, pev_maxs, { 16.0, 16.0, 16.0 } ); set_pev(rpg , pev_solid , 1); set_pev(rpg , pev_movetype , 6); engfunc(EngFunc_SetOrigin, rpg, fOrigin); has_baz[id] = false; } //--------------------------------------------------------------------------------------- baz_damage(id, attacker, damage, weaponDescription[]) { if ( pev(id, pev_takedamage) == DAMAGE_NO ) return; if ( damage <= 0 ) return; new userHealth = get_user_health(id); if (userHealth - damage <= 0 ) { dmgcount[attacker] += userHealth - damage; set_msg_block(gmsg_death, BLOCK_SET); ExecuteHamB(Ham_Killed, id, attacker, 2); set_msg_block(gmsg_death, BLOCK_NOT); message_begin(MSG_BROADCAST, gmsg_death); write_byte(attacker); write_byte(id); write_byte(0); write_string(weaponDescription); message_end(); set_pev(attacker, pev_frags, float(get_user_frags(attacker) + 1)); new kname[32], vname[32], kauthid[32], vauthid[32], kteam[10], vteam[10]; get_user_name(attacker, kname, 31); get_user_team(attacker, kteam, 9); get_user_authid(attacker, kauthid, 31); get_user_name(id, vname, 31); get_user_team(id, vteam, 9); get_user_authid(id, vauthid, 31); log_message("^"%s<%d><%s><%s>^" killed ^"%s<%d><%s><%s>^" with ^"%s^"", kname, get_user_userid(attacker), kauthid, kteam, vname, get_user_userid(id), vauthid, vteam, weaponDescription); } else { dmgcount[attacker] += damage; new origin[3]; get_user_origin(id, origin); message_begin(MSG_ONE,gmsg_damage,{0,0,0},id); write_byte(21); write_byte(20); write_long(DMG_BLAST); write_coord(origin[0]); write_coord(origin[1]); write_coord(origin[2]); message_end(); set_pev(id, pev_health, pev(id, pev_health) - float(damage)); } if ( !get_pcvar_num(pcvar_award) ) return; new breaker = get_pcvar_num(pcvar_dmgforpacks); if ( dmgcount[attacker] > breaker ) { new temp = dmgcount[attacker] / breaker if ( temp * breaker > dmgcount[attacker] ) return; //should never be possible dmgcount[attacker] -= temp * breaker; zp_set_user_ammo_packs( attacker, zp_get_user_ammo_packs(attacker) + temp ); } } Przeczytaj cały wpis
  12. Description RPG Maker 2 is a gigantic parser, which reads a bunch of different config files and interprets them, essentially providing a shell with a bunch of parameters, allowing you to create the RPG of your dreams (within some reason) without ever having to write a single line of code -- though support for expansion plugins to extend the functionality of talents does exist via IPC native/forward calls, and will be covered in a later post. Most features of RPG Maker 2 can be disabled/enabled as you see fit; the main config file holds about 500 different cvars, most of which are gameplay-affecting and customizable. RPG Maker 2 will work with any source game, but it only comes with the config files assembled for Left 4 Dead 2. You'll have to edit the events and weapondamages configs and update them appropriately to support other source games. Honestly, you'll have to edit most of the configs, but none of it's code, and it's mostly well-documented? Requirements/Dependencies RPG Maker 2 still requires Ready Up ( https://github.com/exSkye/rpgmaker2/...y)/ReadyUp-8.x ) and I don't see myself ever removing this dependency, as it provides many important natives/forwards to greatly-extend the amount of events that occur in l4d2. This version is still on old syntax, but is running perfectly-fine on my server, which runs the latest version of SM. I will, however, be porting Ready Up to the new syntax in the near future for uniformity. SM Lib - I use this for custom chat/text colours that are otherwise unavailable. Left 4 DHooks l4d_stocks.inc (/include/ is found in the archive included on this page.) A MySQL database is required even if localhost. SQLite is not supported, and I have no plans to add support for it, though if you do and would like it merged into the official code branch, please open a ticket on the github page. Github I will try to keep regular updates here, but don't forget to always check the github for the latest updates just in case, and if you need to post any issues/bugs that need fixing, it is preferred that you do it on github tickets so that it is all in one place. https://github.com/exSkye/rpgmaker2/...RPGMaker2/v3.x I'm sure there's something I forgot to post, since it's super late, I'm super baked, and I've been coding non-stop for many hours... many, many hours. Remind me, or I'll remember later and add it. You can connect to the server and test out the plugin running the exact version of the files that are in the archive/posted on the github, here: http://skyrpg.org - click the server, then click 'connect' on the drop-down, or alternatively connect skyrpg.org in console. Attached Files rum_rpg_ns.smx (306.9 KB) RPGMaker_v3.4_Mar6_2024.zip (737.6 KB) Wyświetl pełny artykuł
  13. Hey ! Im interested in a HUD which would display the time that's left until map change and system clock. After a bit of research on the forums I've managed to find a plugin which displays system time only, maybe it would be possible to edit it? I'll attach the said plugin. Would it be possible to edit the following: #1 add timeleft until map change just below the system clock #2 make the HUD enabled by default upon entering the server #3 if its a possibility, make the whole HUD/font a bit smaller so that its not that intrusive Thank you ! Attached Files clock.amxx (2.6 KB) Get Plugin or Get Source (clock.sma - 1.2 KB) Przeczytaj cały wpis
  14. Descriptionallow dump survivor voice snene to usermsg id by admin command. make sure yo use this plugin while the game won't auto vocalize anything. Cvars PHP Code: voice_usermsgid_dumper_interval "0.5" voice_usermsgid_dumper_log_path "/logs" Commandssm_dumpvoice :dump a given file. for exmaple: /dumpvoice "adrenaline01" sm_dumpvoicewd :dump files by a wildcard. for exmaple: /dumpvoicewd "thanks" sm_enddumpvoice :end the current voice dump. Change log Spoiler Code: 1.1 test (2024-03-05: -add check and feedback if no file found by arg. 1.0 test (2024-03-05: -init public release. Attached Files Get Plugin or Get Source (voice_usermsgid_dumper.sp - 11.1 KB) Wyświetl pełny artykuł
  15. https://forums.alliedmods.net/showthread.php?t=42201 Give random primary and secondary just like the plugin does, but not for T. CT only! Przeczytaj cały wpis
  16. MYGO.pl

    RSSNoclip Edit

    May anyone edit this noclip code to increase the speed of it? I dont want it to have the same speed as sv_maxspeed, i want to be able to move with noclip when sv_maxspeed is 0 PHP Code: #include <amxmodx> #include <amxmisc> #include <fun> public plugin_init() { register_plugin("amx_cheat","1.0","watch") register_concmd("amx_godmode","amx_godmode",ADMIN_RCON,"<target>") register_concmd("amx_noclip","amx_noclip",ADMIN_RCON,"<target>") } public amx_godmode(id,level,cid) { if (!cmd_access(id,level,cid,2)) return PLUGIN_HANDLED new arg[32], admin_name[32], target_name[32] read_argv(1,arg,31) new player = cmd_target(id,arg,14) if (!player) return PLUGIN_HANDLED get_user_name(id,admin_name,31) get_user_name(player,target_name,31) if (!get_user_godmode(player)) { set_user_godmode(player,1) switch(get_cvar_num("amx_show_activity")) { case 2: client_print(0,print_chat,"ADMIN %s: enabled godmode on %s",admin_name,target_name) case 1: client_print(0,print_chat,"ADMIN: enabled godmode on %s",target_name) } } else { set_user_godmode(player) switch(get_cvar_num("amx_show_activity")) { case 2: client_print(0,print_chat,"ADMIN %s: disabled godmode on %s",admin_name,target_name) case 1: client_print(0,print_chat,"ADMIN: disabled godmode on %s",target_name) } } return PLUGIN_HANDLED } public amx_noclip(id,level,cid) { if (!cmd_access(id,level,cid,2)) return PLUGIN_HANDLED new arg[32], admin_name[32], target_name[32] read_argv(1,arg,31) new player = cmd_target(id,arg,14) if (!player) return PLUGIN_HANDLED get_user_name(id,admin_name,31) get_user_name(player,target_name,31) if (!get_user_noclip(player)) { set_user_noclip(player,1) switch(get_cvar_num("amx_show_activity")) { case 2: client_print(0,print_chat,"ADMIN %s: enabled noclip on %s",admin_name,target_name) case 1: client_print(0,print_chat,"ADMIN: enabled noclip on %s",target_name) } } else { set_user_noclip(player) switch(get_cvar_num("amx_show_activity")) { case 2: client_print(0,print_chat,"ADMIN %s: disabled noclip on %s",admin_name,target_name) case 1: client_print(0,print_chat,"ADMIN: disabled noclip on %s",target_name) } } return PLUGIN_HANDLED } Przeczytaj cały wpis
  17. I would need a plugin so that when you write /black (only admins) the screen will be black and a white HUD message will appear in the middle where I can change the message Przeczytaj cały wpis
  18. Hi, i need help to fix all the error i have amxx file but i dont have sma file i will make decompile amxx to sma and here is the output resault but it have lot of error can anyone help me for fix the all error and make fresh compile sma file. new MaxClients; new String:NULL_STRING[4]; new Float:NULL_VECTOR[3]; replace_all(string[], len, what[], with[]) { new pos; if ((pos = contain(string, what)) == -1) { return 0; } new total; new with_len = strlen(with); new diff = strlen(what) - with_len; new total_len = strlen(string); new temp_pos; while (replace(string[pos], len - pos, what, with)) { total++; pos = with_len + pos; total_len -= diff; if (!(pos >= total_len)) { temp_pos = contain(string[pos], what); if (!(temp_pos == -1)) { pos = temp_pos + pos; } return total; } return total; } return total; } public plugin_init() { register_plugin("welcome & dead hud", "1.0", "Farhan Shaikh"); register_clcmd("say /offhud", "cmdHudOff", -1, 256, -1, MaxClients); register_clcmd("say /onhud", "cmdHudOn", -1, 256, -1, MaxClients); return 0; } public client_putinserver(id) { set_task(1084227584, "show_dead_hud", id, 404, MaxClients, 396, MaxClients); set_task(1084227584, "welcomemsg", id, 404, MaxClients, 452, MaxClients); return 0; } public show_dead_hud(id) { if (!is_user_connected(id)) { return 0; } new var1; if (is_user_connected(id) && !is_user_alive(id)) { set_hudmessage(MaxClients, 255, 252, 1008981770, 1045220557, MaxClients, 1086324736, 1084227584, 1036831949, 1045220557, -1); show_hudmessage(id, "~~~~~~~~~~~~~~~~~~~ \n Save all our IP's, If the Main IP is \n not visible then kindly try joining from other IP \n * 152.67.27.93:27015 \n * 144.24.100.130:27015 \n * 140.238.167.130:27015\n Type /offhud To Remove This Message \n~~~~~~~~~~~~~~~~~~~"); } return 0; } public cmdHudOff(id) { remove_task(id, MaxClients); ColorChat(id, "!gYour turned !tOFF !ghud"); return 0; } public cmdHudOn(id) { show_dead_hud(id); set_task(1065353216, "show_dead_hud", id, 404, MaxClients, 1588, MaxClients); ColorChat(id, "!gYou turned !tON !ghud"); return 0; } public welcomemsg(id) { set_hudmessage(MaxClients, 255, 42, -1082130432, 1050253722, MaxClients, 1086324736, 1084227584, 1036831949, 1045220557, -1); show_hudmessage(id, "~~~~~~~~~~~~~~~~~~~ \n Save all our IP's, If the Main IP is \n not visible then kindly try joining from other IP \n * 152.67.27.93:27015 \n * 144.24.100.130:27015 \n * 140.238.167.130:27015\n ~~~~~~~~~~~~~~~~~~~"); ColorChat(id, "!t==>> !gSave all our IP's, If the Main IP is not visible then kindly try joining from other IP"); ColorChat(id, "!t==>> !y*!g152.67.27.93:27015 !y*!g144.24.100.130:27015 !y*!g140.238.167.130:27015"); return 0; } ColorChat(id, input[]) { new count = 1; new players[32]; static msg[191]; vformat(msg, 190, input, 3); replace_all(msg, 190, "!y", 4012); replace_all(msg, 190, "!g", 4032); replace_all(msg, 190, "!t", 4052); if (id) { players[0] = id; } else { get_players(players, count, "ch", 4072); } new i; while (i < count) { if (is_user_connected(players[i])) { message_begin(NULL_VECTOR, get_user_msgid("SayText"), 4108, players[i]); write_byte(players[i]); write_string(msg); message_end(); } i++; } return 0; } Przeczytaj cały wpis
  19. Alright, this is my first time trying to write a plugin for Left 4 Dead 2, and it may not be flawless. So any suggestions or improvements are welcomed. It's major function is to manually force the finale to start or force the rescue to arrive. Especially useful in some custom campaigns when the finale stage stuck and the rescue vehicle never coming. And also you can use it when you want to skip the long waiting rescue. No other dependencies required. It's original idea is from a mod called 'Admin System', written in Squirrel language, and I ported it to SourcePawn language, and added some improvements. And thanks to Marttt's 'l4d2_unlock_finales' plugin (https://forums.alliedmods.net/showthread.php?t=333274) provides a way to remove the entity for blocking survivors in official campaigns when finale starts. Usage: You can type !finale or /finale in chat box to open the 'Finale Options' menu. And you can also type '/finale start' or '/finale rescue' in chat box, they will do the same as selecting in the menu. There are several types of finales, such as: 1. 'Defending Type' (When finale starts, you need to defend and wait for several minutes, the rescue arrives). 2. 'Gas Can Filling Type' (When specified amount of gas cans are poured, the rescue arrives). 3. 'Run To The Finish Type' (The rescue vehicle is already waiting for you at the finish line, you just need to run to it, the rescue completes). This plugin only supports all 'Defending Type' and most 'Gas Can Filling Type' campaigns. 'Run To The Finish Type' campaigns are not supported, cuz rescue vehicle is already here in the finish line. For Example, c5m5 (The Parish Finale) and c13m4 (Cold Stream Finale) are not supported. Just simply download the 3 following files, and put 'l4d2_finale_control.sp' into your 'scripting' folder, put 'l4d2_finale_control.smx' into your 'plugins' folder, put 'l4d2_finale_control.phrases.txt' into your 'translations' folder. That's all. Attached Files Get Plugin or Get Source (l4d2_finale_control.sp - 11.2 KB) l4d2_finale_control.smx (7.7 KB) l4d2_finale_control.phrases.txt (447 Bytes) Wyświetl pełny artykuł
  20. MYGO.pl

    RSSLag Exploit

    Hello everyone. We're getting a massive lags with some kind of exploits, basically what it does: -Everyone gets a high ping ~200 -Crashes people's connection to server. NOTE: Its not a DDoS attack, its a exploit. Saw a few video's on youtube based on this but didnt find solution, any helps ?? Przeczytaj cały wpis
  21. Descriptionallow extra jump in air. support apex jump. Cvars PHP Code: // acceleration of jump when going to die // - // Default: "60.0" // Minimum: "1.000000" multiple_jump_acceleration_dying "60.0" // acceleration of jump when limp // - // Default: "120.0" // Minimum: "1.000000" multiple_jump_acceleration_limp "120.0" // acceleration of jump in normal // - // Default: "220.0" // Minimum: "1.000000" multiple_jump_acceleration_normal "220.0" // load this file // - // Default: "data/multiple_jump_custom_sequences.cfg" multiple_jump_path "data/multiple_jump_custom_sequences.cfg" // max times to jump. 0 or lower = disable // - // Default: "1" multiple_jump_times "1" // z axis speed of jump // - // Default: "300.0" // Minimum: "1.000000" multiple_jump_up "300.0" Commandssm_multiple_jump_reload_custom_sequences (admin flag "z") :reload config data from file. Change log Spoiler Code: 1.2 (2024-03-03: -add cvar "multiple_jump_acceleration_dying". -change default value of cvar "multiple_jump_acceleration_limp" to 120.0 1.1 (2024-03-03: -minor fix. 1.0 (2024-03-03: -init public release. Configs installationput multiple_jump_custom_sequences.cfg in sourcemod/data/. if you changed the file name or path, you have to edit the cvar "path" too. spilte up numbers with comma. default config contains sequences of getting up and striked fly of each model. you can find models and sequences by "Left 4 Dead 2 Authoring Tools - Model Viewer". Attached Files multiple_jump_custom_sequences.cfg (895 Bytes) Get Plugin or Get Source (multiple_jump.sp - 17.1 KB) Wyświetl pełny artykuł
  22. Allow extra medkits for 5+ players in COOP L4D2. Has CVARS for allowing extra medkits when the finale is activated and in Survival for 5+ players at each round start. All code derived from [L4D(2)] SuperVersus [1.5.4] and modding to aforementioned plugin by Marcus101RR, Merudo, Foxhound27, Senip, RainyDagger, and Shao. Attached Files Get Plugin or Get Source (l4d2_extra_healthkits.sp - 7.4 KB) Wyświetl pełny artykuł
  23. As the title. Thanks:Silvers - for providing the method. Change log Spoiler Code: 1.0 (2024-03-02: -init public release. Attached Files Get Plugin or Get Source (no_ragdoll.sp - 1.9 KB) Wyświetl pełny artykuł
  24. Descriptionconverts jump to high speed avoid if jump to left/back/right direction. support apex jump. current support translation: chi(Simplified Chinese). I won't add more translations, you could make your own or ask another one. Cvars PHP Code: // acceleration of avoid // - // Default: "600.0" // Minimum: "1.000000" jump_avoid_acceleration "600.0" // interval to avoid again // - // Default: "6.0" // Minimum: "0.000000" jump_avoid_interval "6.0" // load this file // - // Default: "data/jump_avoid_custom_sequences.cfg" jump_avoid_path "data/jump_avoid_custom_sequences.cfg" // z axis speed of avoid // - // Default: "251.0" // Minimum: "1.000000" jump_avoid_up "251.0" Commandssm_jump_avoid_reload_custom_sequences (admin flag "z") :reload config data from file. Change log Spoiler Code: 1.0 (2024-03-02: -init public release. Configs installationput jump_avoid_custom_sequences.cfg in sourcemod/data/. if you changed the file name or path, you have to edit the cvar "path" too. spilte up numbers with comma. default config contains sequences of getting up and striked fly of each model. you can find models and sequences by "Left 4 Dead 2 Authoring Tools - Model Viewer". Attached Files jump_avoid.phrases.txt (441 Bytes) jump_avoid_custom_sequences.cfg (892 Bytes) Get Plugin or Get Source (jump_avoid.sp - 15.5 KB) Wyświetl pełny artykuł
  25. Hey, So i recently got a coloured AdminCmd.sma to make the slaps/ban/kick etc coloured But it didnt came with the plmenu for slapmenu coloured, for example i use amx_slap from console it is coloured But when i use amx_slapmenu it is not coloured and i want to make it coloured just Like how AdminCmd is, this is the admincmd.sma code: PHP Code: #include <amxmodx> #include <amxmisc> #define MAXRCONCVARS 16 new g_cvarRcon[MAXRCONCVARS][32] new g_cvarRconNum new g_pauseCon new Float:g_pausAble new bool:g_Paused new bool:g_PauseAllowed = false new g_addCvar[] = "amx_cvar add %s" public plugin_init() { register_plugin("Admin Commands", AMXX_VERSION_STR, "ANONIM") register_dictionary("admincmd.txt") register_dictionary("common.txt") register_concmd("amx_kick", "cmdKick", ADMIN_KICK, "<name or #userid> [reason]") register_concmd("amx_ban", "cmdBan", ADMIN_BAN, "<name or #userid> <minutes> [reason]") register_concmd("amx_banip", "cmdBanIP", ADMIN_BAN, "<name or #userid> <minutes> [reason]") register_concmd("amx_addban", "cmdAddBan", ADMIN_RCON, "<authid or ip> <minutes> [reason]") register_concmd("amx_unban", "cmdUnban", ADMIN_BAN, "<authid or ip>") register_concmd("amx_slay", "cmdSlay", ADMIN_SLAY, "<name or #userid>") register_concmd("amx_slap", "cmdSlap", ADMIN_SLAY, "<name or #userid> [power]") register_concmd("amx_leave", "cmdLeave", ADMIN_KICK, "<tag> [tag] [tag] [tag]") register_concmd("amx_pause", "cmdPause", ADMIN_CVAR, "- pause or unpause the game") register_concmd("amx_who", "cmdWho", ADMIN_ADMIN, "- displays who is on server") register_concmd("amx_cvar", "cmdCvar", ADMIN_CVAR, "<cvar> [value]") register_concmd("amx_plugins", "cmdPlugins", ADMIN_ADMIN) register_concmd("amx_modules", "cmdModules", ADMIN_ADMIN) register_concmd("amx_map", "cmdMap", ADMIN_MAP, "<mapname>") register_concmd("amx_cfg", "cmdCfg", ADMIN_CFG, "<filename>") register_concmd("amx_nick", "cmdNick", ADMIN_SLAY, "<name or #userid> <new nick>") register_clcmd("amx_rcon", "cmdRcon", ADMIN_RCON, "<command line>") register_clcmd("amx_showrcon", "cmdShowRcon", ADMIN_RCON, "<command line>") register_clcmd("pauseAck", "cmdLBack") } public plugin_cfg() { // Cvars which can be changed only with rcon access server_cmd(g_addCvar, "rcon_password") server_cmd(g_addCvar, "amx_show_activity") server_cmd(g_addCvar, "amx_mode") server_cmd(g_addCvar, "amx_password_field") server_cmd(g_addCvar, "amx_default_access") server_cmd(g_addCvar, "amx_reserved_slots") server_cmd(g_addCvar, "amx_reservation") server_cmd(g_addCvar, "amx_conmotd_file") } public cmdKick(id, level, cid) { if (!cmd_access(id, level, cid, 2)) return PLUGIN_HANDLED new arg[32] read_argv(1, arg, 31) new player = cmd_target(id, arg, 1) if (!player) return PLUGIN_HANDLED new authid[32], authid2[32], name2[32], name[32], userid2, reason[32] get_user_authid(id, authid, 31) get_user_authid(player, authid2, 31) get_user_name(player, name2, 31) get_user_name(id, name, 31) userid2 = get_user_userid(player) read_argv(2, reason, 31) remove_quotes(reason) log_amx("Kick: ^"%s<%d><%s><>^" kick ^"%s<%d><%s><>^" (reason ^"%s^")", name, get_user_userid(id), authid, name2, userid2, authid2, reason) switch (get_cvar_num("amx_show_activity")) { case 2: chat_color(0,"%L", LANG_PLAYER, "ADMIN_KICK_2", name, name2) case 1: chat_color(0,"%L", LANG_PLAYER, "ADMIN_KICK_1", name2) } if (is_user_bot(player)) server_cmd("kick #%d", userid2) else { if (reason[0]) server_cmd("kick #%d ^"%s^"", userid2, reason) else server_cmd("kick #%d", userid2) } console_print(id, "[AMXX] Client ^"%s^" kicked", name2) return PLUGIN_HANDLED } public cmdUnban(id, level, cid) { if (!cmd_access(id, level, cid, 2)) return PLUGIN_HANDLED new arg[32], authid[32], name[32] read_argv(1, arg, 31) if (contain(arg, ".") != -1) { server_cmd("removeip ^"%s^";writeip", arg) console_print(id, "[AMXX] %L", id, "IP_REMOVED", arg) } else { server_cmd("removeid %s;writeid", arg) console_print(id, "[AMXX] %L", id, "AUTHID_REMOVED", arg) } get_user_name(id, name, 31) switch (get_cvar_num("amx_show_activity")) { case 2: chat_color(0,"%L", LANG_PLAYER, "ADMIN_UNBAN_2", name, arg) case 1: chat_color(0,"%L", LANG_PLAYER, "ADMIN_UNBAN_1", arg) } get_user_authid(id, authid, 31) log_amx("Cmd: ^"%s<%d><%s><>^" unban ^"%s^"", name, get_user_userid(id), authid, arg) return PLUGIN_HANDLED } public cmdAddBan(id, level, cid) { if (!cmd_access(id, level, cid, 3)) return PLUGIN_HANDLED new arg[32], authid[32], name[32], minutes[32], reason[32] read_argv(1, arg, 31) read_argv(2, minutes, 31) read_argv(3, reason, 31) if (contain(arg, ".") != -1) { server_cmd("addip ^"%s^" ^"%s^";wait;writeip", minutes, arg) console_print(id, "[AMXX] Ip ^"%s^" added to ban list", arg) } else { server_cmd("banid ^"%s^" ^"%s^";wait;writeid", minutes, arg) console_print(id, "[AMXX] Authid ^"%s^" added to ban list", arg) } get_user_name(id, name, 31) switch (get_cvar_num("amx_show_activity")) { case 2: chat_color(0,"%L", LANG_PLAYER, "ADMIN_ADDBAN_2", name, arg) case 1: chat_color(0,"%L", LANG_PLAYER, "ADMIN_ADDBAN_1", arg) } get_user_authid(id, authid, 31) log_amx("Cmd: ^"%s<%d><%s><>^" ban ^"%s^" (minutes ^"%s^") (reason ^"%s^")", name, get_user_userid(id), authid, arg, minutes, reason) return PLUGIN_HANDLED } public cmdBan(id, level, cid) { if (!cmd_access(id, level, cid, 3)) return PLUGIN_HANDLED new target[32], minutes[8], reason[64] read_argv(1, target, 31) read_argv(2, minutes, 7) read_argv(3, reason, 63) new player = cmd_target(id, target, 9) if (!player) return PLUGIN_HANDLED new authid[32], name2[32], authid2[32], name[32] new userid2 = get_user_userid(player) get_user_authid(player, authid2, 31) get_user_authid(id, authid, 31) get_user_name(player, name2, 31) get_user_name(id, name, 31) new temp[64], banned[16], nNum = str_to_num(minutes) if (nNum) format(temp, 63, "Ai primit ban pentru %s minute", minutes) else format(temp, 63, "Ai primit ban permanent Permanent", player, "PERM") format(banned, 15, "", player, "BANNED") new address[32] get_user_ip(player, address, 31, 1) if (reason[0]) server_cmd("kick #%d ^"%s (%s %s)^";wait;addip ^"%s^" ^"%s^";wait;writeip", userid2, reason, banned, temp, minutes, address) else server_cmd("kick #%d ^"%s %s^";wait;addip ^"%s^" ^"%s^";wait;writeip", userid2, banned, temp, minutes, address) new pl[32]; get_user_name(player, pl, 31) chat_color(0,"!gADMIN!team %s!g: ban!team %s!g pentru!team %s!g minute. Motiv: (!team %s!g )", name, pl, minutes, reason) client_cmd(player, "wait;snapshot;wait"); new activity = get_cvar_num("amx_show_activity") if (activity != 0) { } console_print(id, "Jucatorul %s a fost banat", name2) return PLUGIN_HANDLED } public cmdBanIP(id, level, cid) { if (!cmd_access(id, level, cid, 3)) return PLUGIN_HANDLED new target[32], minutes[8], reason[64] read_argv(1, target, 31) read_argv(2, minutes, 7) read_argv(3, reason, 63) new player = cmd_target(id, target, 9) if (!player) return PLUGIN_HANDLED new authid[32], name2[32], authid2[32], name[32] new userid2 = get_user_userid(player) get_user_authid(player, authid2, 31) get_user_authid(id, authid, 31) get_user_name(player, name2, 31) get_user_name(id, name, 31) new temp[64], banned[16], nNum = str_to_num(minutes) if (nNum) format(temp, 63, "Ai primit ban pentru %s minute", minutes) else format(temp, 63, "Ai primit ban permanent", player, "PERM") format(banned, 15, "", player, "BANNED") new address[32] get_user_ip(player, address, 31, 1) if (reason[0]) server_cmd("kick #%d ^"%s (%s %s)^";wait;addip ^"%s^" ^"%s^";wait;writeip", userid2, reason, banned, temp, minutes, address) else server_cmd("kick #%d ^"%s %s^";wait;addip ^"%s^" ^"%s^";wait;writeip", userid2, banned, temp, minutes, address) new pl[32]; get_user_name(player, pl, 31) chat_color(0,"!gADMIN!team %s!g: ban!team %s!g pentru!team %s!g minute. Motiv: (!team %s!g )", name, pl, minutes, reason) client_cmd(player, "wait;snapshot;wait"); new activity = get_cvar_num("amx_show_activity") if (activity != 0) { } console_print(id, "JucaTorul %s a FosT banaT!", name2) return PLUGIN_HANDLED } public cmdSlay(id, level, cid) { if (!cmd_access(id, level, cid, 2)) return PLUGIN_HANDLED new arg[32] read_argv(1, arg, 31) new player = cmd_target(id, arg, 5) if (!player) return PLUGIN_HANDLED user_kill(player) new authid[32], name2[32], authid2[32], name[32] get_user_authid(id, authid, 31) get_user_name(id, name, 31) get_user_authid(player, authid2, 31) get_user_name(player, name2, 31) log_amx("Cmd: ^"%s<%d><%s><>^" slay ^"%s<%d><%s><>^"", name, get_user_userid(id), authid, name2, get_user_userid(player), authid2) switch (get_cvar_num("amx_show_activity")) { case 2: chat_color(0,"%L", LANG_PLAYER, "ADMIN_SLAY_2", name, name2) case 1: chat_color(0,"%L", LANG_PLAYER, "ADMIN_SLAY_1", name2) } console_print(id, "[AMXX] %L", id, "CLIENT_SLAYED", name2) return PLUGIN_HANDLED } public cmdSlap(id, level, cid) { if (!cmd_access(id, level, cid, 2)) return PLUGIN_HANDLED new arg[32] read_argv(1, arg, 31) new player = cmd_target(id, arg, 5) if (!player) return PLUGIN_HANDLED new spower[32], authid[32], name2[32], authid2[32], name[32] read_argv(2, spower, 31) new damage = str_to_num(spower) user_slap(player, damage) get_user_authid(id, authid, 31) get_user_name(id, name, 31) get_user_authid(player, authid2, 31) get_user_name(player, name2, 31) log_amx("Cmd: ^"%s<%d><%s><>^" slap with %d damage ^"%s<%d><%s><>^"", name, get_user_userid(id), authid, damage, name2, get_user_userid(player), authid2) switch (get_cvar_num("amx_show_activity")) { case 2: chat_color(0,"%L", LANG_PLAYER, "ADMIN_SLAP_2", name, name2, damage) case 1: chat_color(0,"%L", LANG_PLAYER, "ADMIN_SLAP_1", name2, damage) } console_print(id, "[AMXX] %L", id, "CLIENT_SLAPED", name2, damage) return PLUGIN_HANDLED } public chMap(map[]) { server_cmd("changelevel %s", map) } public cmdMap(id, level, cid) { if (!cmd_access(id, level, cid, 2)) return PLUGIN_HANDLED new arg[32] new arglen = read_argv(1, arg, 31) if (!is_map_valid(arg)) { console_print(id, "[AMXX] %L", id, "MAP_NOT_FOUND") return PLUGIN_HANDLED } new authid[32], name[32] get_user_authid(id, authid, 31) get_user_name(id, name, 31) switch (get_cvar_num("amx_show_activity")) { case 2: chat_color(0,"%L", LANG_PLAYER, "ADMIN_MAP_2", name, arg) case 1: chat_color(0,"%L", LANG_PLAYER, "ADMIN_MAP_1", arg) } log_amx("Cmd: ^"%s<%d><%s><>^" changelevel ^"%s^"", name, get_user_userid(id), authid, arg) new _modName[10] get_modname(_modName, 9) if (!equal(_modName, "zp")) { message_begin(MSG_ALL, SVC_INTERMISSION) message_end() } set_task(2.0, "chMap", 0, arg, arglen + 1) return PLUGIN_HANDLED } onlyRcon(name[]) { for (new a = 0; a < g_cvarRconNum; ++a) if (equali(g_cvarRcon[a], name)) return 1 return 0 } public cmdCvar(id, level, cid) { if (!cmd_access(id, level, cid, 2)) return PLUGIN_HANDLED new arg[32], arg2[64] read_argv(1, arg, 31) read_argv(2, arg2, 63) if (equal(arg, "add") && (get_user_flags(id) & ADMIN_RCON)) { if (cvar_exists(arg2)) { if (g_cvarRconNum < MAXRCONCVARS) copy(g_cvarRcon[g_cvarRconNum++], 31, arg2) else console_print(id, "[AMXX] %L", id, "NO_MORE_CVARS") } return PLUGIN_HANDLED } if (!cvar_exists(arg)) { console_print(id, "[AMXX] %L", id, "UNKNOWN_CVAR", arg) return PLUGIN_HANDLED } if (onlyRcon(arg) && !(get_user_flags(id) & ADMIN_RCON)) { console_print(id, "[AMXX] %L", id, "CVAR_NO_ACC") return PLUGIN_HANDLED } else if (equal(arg, "sv_password") && !(get_user_flags(id) & ADMIN_PASSWORD)) { console_print(id, "[AMXX] %L", id, "CVAR_NO_ACC") return PLUGIN_HANDLED } if (read_argc() < 3) { get_cvar_string(arg, arg2, 63) console_print(id, "[AMXX] %L", id, "CVAR_IS", arg, arg2) return PLUGIN_HANDLED } new authid[32], name[32] get_user_authid(id, authid, 31) get_user_name(id, name, 31) log_amx("Cmd: ^"%s<%d><%s><>^" set cvar (name ^"%s^") (value ^"%s^")", name, get_user_userid(id), authid, arg, arg2) set_cvar_string(arg, arg2) new activity = get_cvar_num("amx_show_activity") if (activity != 0) { new players[32], pnum, admin[64], cvar_val[64], len get_players(players, pnum, "c") for (new i = 0; i < pnum; i++) { len = format(admin, 255, "%L", players[i], "ADMIN") if (activity == 1) len += copy(admin[len], 255-len, ":") else len += format(admin[len], 255-len, " %s:", name) if (equal(arg, "rcon_password") || equal(arg, "sv_password")) format(cvar_val, 63, "*** %L ***", players[i], "PROTECTED") else copy(cvar_val, 63, arg2) chat_color(players[i],"%L", players[i], "SET_CVAR_TO", name, arg, arg2) } } console_print(id, "[AMXX] %L", id, "CVAR_CHANGED", arg, arg2) return PLUGIN_HANDLED } public cmdPlugins(id, level, cid) { if (!cmd_access(id, level, cid, 1)) return PLUGIN_HANDLED new name[32], version[32], author[32], filename[32], status[32] new lName[32], lVersion[32], lAuthor[32], lFile[32], lStatus[32] format(lName, 31, "%L", id, "NAME") format(lVersion, 31, "%L", id, "VERSION") format(lAuthor, 31, "%L", id, "AUTHOR") format(lFile, 31, "%L", id, "FILE") format(lStatus, 31, "%L", id, "STATUS") new num = get_pluginsnum() new running = 0 console_print(id, "%L:", id, "LOADED_PLUGINS") console_print(id, "%-18.17s %-8.7s %-17.16s %-16.15s %-9.8s", lName, lVersion, lAuthor, lFile, lStatus) for (new i = 0; i <num; i++) { get_plugin(i, filename, 31, name, 31, version, 31, author, 31, status, 31) console_print(id, "%-18.17s %-8.7s %-17.16s %-16.15s %-9.8s", name, version, author, filename, status) if (status[0]=='d' || status[0]=='r') // "debug" or "running" running++ } console_print(id, "%L", id, "PLUGINS_RUN", num, running) return PLUGIN_HANDLED } public cmdModules(id, level, cid) { if (!cmd_access(id, level, cid, 1)) return PLUGIN_HANDLED new name[32], version[32], author[32], status, sStatus[16] new lName[32], lVersion[32], lAuthor[32] format(lName, 31, "%L", id, "NAME") format(lVersion, 31, "%L", id, "VERSION") format(lAuthor, 31, "%L", id, "AUTHOR") new num = get_modulesnum() console_print(id, "%L:", id, "LOADED_MODULES") console_print(id, "%-23.22s %-8.7s %-20.19s", lName, lVersion, lAuthor) for (new i = 0; i < num; i++) { get_module(i, name, 31, author, 31, version, 31, status) switch (status) { case module_loaded: copy(sStatus, 15, "running") default: copy(sStatus, 15, "error") } console_print(id, "%-23.22s %-8.7s %-20.19s", name, version, author) } console_print(id, "%L", id, "NUM_MODULES", num) return PLUGIN_HANDLED } public cmdCfg(id, level, cid) { if (!cmd_access(id, level, cid, 2)) return PLUGIN_HANDLED new arg[128] read_argv(1, arg, 127) if (!file_exists(arg)) { console_print(id, "[AMXX] %L", id, "FILE_NOT_FOUND", arg) return PLUGIN_HANDLED } new authid[32], name[32] get_user_authid(id, authid, 31) get_user_name(id, name, 31) log_amx("Cmd: ^"%s<%d><%s><>^" execute cfg (file ^"%s^")", name, get_user_userid(id), authid, arg) console_print(id, "[AMXX] Executing file ^"%s^"", arg) server_cmd("exec %s", arg) switch(get_cvar_num("amx_show_activity")) { case 2: chat_color(0,"%L", LANG_PLAYER, "ADMIN_CONF_2", name, arg) case 1: chat_color(0,"%L", LANG_PLAYER, "ADMIN_CONF_1", arg) } return PLUGIN_HANDLED } public cmdLBack() { if (!g_PauseAllowed) return PLUGIN_CONTINUE new paused[25] format(paused, 24, "%L", g_pauseCon, g_Paused ? "UNPAUSED" : "PAUSED") set_cvar_float("pausable", g_pausAble) console_print(g_pauseCon, "[AMXX] Server %s", paused) g_PauseAllowed = false if (g_Paused) g_Paused = false else g_Paused = true return PLUGIN_HANDLED } public cmdPause(id, level, cid) { if (!cmd_access(id, level, cid, 1)) return PLUGIN_HANDLED new authid[32], name[32], slayer = id get_user_authid(id, authid, 31) get_user_name(id, name, 31) g_pausAble = get_cvar_float("pausable") if (!slayer) slayer = find_player("h") if (!slayer) { console_print(id, "[AMXX] %L", id, "UNABLE_PAUSE") return PLUGIN_HANDLED } set_cvar_float("pausable", 1.0) g_PauseAllowed = true client_cmd(slayer, "pause;pauseAck") log_amx("Cmd: ^"%s<%d><%s><>^" %s server", name, get_user_userid(id), authid, g_Paused ? "unpause" : "pause") console_print(id, "[AMXX] %L", id, g_Paused ? "UNPAUSING" : "PAUSING") new activity = get_cvar_num("amx_show_activity") if (activity != 0) { new players[32], pnum, msg[128], len get_players(players, pnum, "c") for (new i = 0; i < pnum; i++) { len = format(msg, 127, "%L", players[i], "ADMIN") if (activity == 1) len += copy(msg[len], 127-len, ": ") else len += format(msg[len], 127-len, " %s: ", name) format(msg[len], 127-len, "%L", players[i], g_Paused ? "UNPAUSE" : "PAUSE") client_print(players[i], print_chat, "%s server", msg) } } g_pauseCon = id return PLUGIN_HANDLED } public cmdShowRcon(id, level, cid) { if (!cmd_access(id, level, cid, 2)) return PLUGIN_HANDLED new password[64] get_cvar_string("rcon_password", password, 63) if (!password[0]) { cmdRcon(id, level, cid) } else { new args[128] read_args(args, 127) client_cmd(id, "rcon_password %s", password) client_cmd(id, "rcon %s", args) } return PLUGIN_HANDLED } public cmdRcon(id, level, cid) { if (!cmd_access(id, level, cid, 2)) return PLUGIN_HANDLED new arg[128], authid[32], name[32] read_args(arg, 127) get_user_authid(id, authid, 31) get_user_name(id, name, 31) log_amx("Cmd: ^"%s<%d><%s><>^" server console (cmdline ^"%s^")", name, get_user_userid(id), authid, arg) console_print(id, "[AMXX] %L", id, "COM_SENT_SERVER", arg) server_cmd("%s", arg) return PLUGIN_HANDLED } public cmdWho(id, level, cid) { if (!cmd_access(id, level, cid, 1)) return PLUGIN_HANDLED new players[32], inum, cl_on_server[64], authid[32], name[32], flags, sflags[32] new lImm[16], lRes[16], lAccess[16], lYes[16], lNo[16] format(lImm, 15, "%L", id, "IMMU") format(lRes, 15, "%L", id, "RESERV") format(lAccess, 15, "%L", id, "ACCESS") format(lYes, 15, "%L", id, "YES") format(lNo, 15, "%L", id, "NO") get_players(players, inum) format(cl_on_server, 63, "%L", id, "CLIENTS_ON_SERVER") console_print(id, "^n%s:^n # %-16.15s %-20s %-8s %-4.3s %-4.3s %s", cl_on_server, "nick", "authid", "userid", lImm, lRes, lAccess) for (new a = 0; a < inum; ++a) { get_user_authid(players[a], authid, 31) get_user_name(players[a], name, 31) flags = get_user_flags(players[a]) get_flags(flags, sflags, 31) console_print(id, "%2d %-16.15s %-20s %-8d %-6.5s %-6.5s %s", players[a], name, authid, get_user_userid(players[a]), (flags&ADMIN_IMMUNITY) ? lYes : lNo, (flags&ADMIN_RESERVATION) ? lYes : lNo, sflags) } console_print(id, "%L", id, "TOTAL_NUM", inum) get_user_authid(id, authid, 31) get_user_name(id, name, 31) log_amx("Cmd: ^"%s<%d><%s><>^" ask for players list", name, get_user_userid(id), authid) return PLUGIN_HANDLED } hasTag(name[], tags[4][32], tagsNum) { for (new a = 0; a < tagsNum; ++a) if (contain(name, tags[a]) != -1) return a return -1 } public cmdLeave(id, level, cid) { if (!cmd_access(id, level, cid, 2)) return PLUGIN_HANDLED new argnum = read_argc() new ltags[4][32] new ltagsnum = 0 for (new a = 1; a < 5; ++a) { if (a < argnum) read_argv(a, ltags[ltagsnum++], 31) else ltags[ltagsnum++][0] = 0 } new nick[32], ires, pnum = get_maxplayers() + 1, count = 0, lReason[128] for (new b = 1; b < pnum; ++b) { if (!is_user_connected(b) && !is_user_connecting(b)) continue get_user_name(b, nick, 31) ires = hasTag(nick, ltags, ltagsnum) if (ires != -1) { console_print(id, "[AMXX] %L", id, "SKIP_MATCH", nick, ltags[ires]) continue } if (get_user_flags(b) & ADMIN_IMMUNITY) { console_print(id, "[AMXX] %L", id, "SKIP_IMM", nick) continue } console_print(id, "[AMXX] %L", id, "KICK_PL", nick) if (is_user_bot(b)) server_cmd("kick #%d", get_user_userid(b)) else { format(lReason, 127, "%L", b, "YOU_DROPPED") server_cmd("kick #%d ^"%s^"", get_user_userid(b), lReason) } count++ } console_print(id, "[AMXX] %L", id, "KICKED_CLIENTS", count) new authid[32], name[32] get_user_authid(id, authid, 31) get_user_name(id, name, 31) log_amx("Kick: ^"%s<%d><%s><>^" leave some group (tag1 ^"%s^") (tag2 ^"%s^") (tag3 ^"%s^") (tag4 ^"%s^")", name, get_user_userid(id), authid, ltags[0], ltags[1], ltags[2], ltags[3]) switch(get_cvar_num("amx_show_activity")) { case 2: chat_color(0,"%L", LANG_PLAYER, "ADMIN_LEAVE_2", name, ltags[0], ltags[1], ltags[2], ltags[3]) case 1: chat_color(0,"%L", LANG_PLAYER, "ADMIN_LEAVE_1", ltags[0], ltags[1], ltags[2], ltags[3]) } return PLUGIN_HANDLED } public cmdNick(id, level, cid) { if (!cmd_access(id, level, cid, 3)) return PLUGIN_HANDLED new arg1[32], arg2[32], authid[32], name[32], authid2[32], name2[32] read_argv(1, arg1, 31) read_argv(2, arg2, 31) new player = cmd_target(id, arg1, 1) if (!player) return PLUGIN_HANDLED get_user_authid(id, authid, 31) get_user_name(id, name, 31) get_user_authid(player, authid2, 31) get_user_name(player, name2, 31) client_cmd(player, "name ^"%s^"", arg2) log_amx("Cmd: ^"%s<%d><%s><>^" change nick to ^"%s^" ^"%s<%d><%s><>^"", name, get_user_userid(id), authid, arg2, name2, get_user_userid(player), authid2) switch (get_cvar_num("amx_show_activity")) { case 2: chat_color(0,"%L", LANG_PLAYER, "ADMIN_NICK_2", name, name2, arg2) case 1: chat_color(0,"%L", LANG_PLAYER, "ADMIN_NICK_1", name2, arg2) } console_print(id, "[AMXX] %L", id, "CHANGED_NICK", name2, arg2) return PLUGIN_HANDLED } stock chat_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, "!team", "^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(); } } } } Przeczytaj cały wpis
×
×
  • Dodaj nową pozycję...