Jump to content

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
  • Posts

    22,495
  • Joined

  • Last visited

    Never
  • Days Won

    11

MYGO.pl last won the day on July 12 2019

MYGO.pl had the most liked content!

About MYGO.pl

  • Birthday 07/06/2016

Informacje o mnie

  • Imię
    RSS Plugins
  • Skąd
    RSS Plugins
  • Płeć
    Mężczyzna
  • Zawód
    RSS Plugins

Kontakt

Recent Profile Visitors

9,358 profile views

MYGO.pl's Achievements

Nowicjusz

Nowicjusz (1/14)

51

Reputation

  1. Hi guys! i want this plugin just some edits I want when someone say /Shop or /sp , he will see a menu shop SHOP MENU : /r1. /wBUY VIP FOR 1 HOUR /r400Pts /r2. /wBUY VIP FOR 2 HOUR /r650Pts. That's it guys PHP Code: #include <amxmodx> #include <fun> #include <cstrike> #include <point_system> new g_iBlinkAcct new const VERSION[] = "1.0" // CT items new szCTItems[][]= { "M249 Gun", "10000$ Money", "5000$ Money", "50 HP", "50 AP", "He-Grenade" } // TR Items new szTRItems[][]= { "10000$ Money", "5000$ Money", "He-Grenade", "50 HP", "50 AP" } // CT items price (point) new g_szCostCT[] = { 50, 40, 20, 15, 5, 10 } // TR Items price (point) new g_szCostTR[] = { 40, 20, 10, 15, 5 } public plugin_init() { register_plugin("Point Shop", VERSION, "LearninG") // register a way to open menu register_clcmd("say /sp", "shop") register_clcmd("say_team /sp" , "shop") register_clcmd("say /shop", "shop") register_clcmd("say_team /shop", "shop") } // show them a menu based on their team public shop(id) { switch(cs_get_user_team(id)) { case CS_TEAM_CT: { menu_ct(id) } case CS_TEAM_T: { menu_t(id) } } } // CT's menu public menu_ct(id) { new Temp[101], point point = get_user_point(id) formatex(Temp,charsmax(Temp), "\rYour Points: \g %d", point); new menu = menu_create(Temp, "handler_ct") new szItemName[64] for(new i; i<sizeof szCTItems && i<sizeof g_szCostCT; i++) { if( point < g_szCostCT[i] ) { formatex(szItemName, charsmax(szItemName), "\d%s (%d)", szCTItems[ i ], g_szCostCT[ i ]) } else { formatex(szItemName, charsmax(szItemName), "%s\y(%d)", szCTItems[ i ], g_szCostCT[ i ]) } menu_additem(menu , szItemName) } menu_display(id , menu , 0) } // TR's menu public menu_t(id) { new Temp[101], point point = get_user_point(id) formatex(Temp,charsmax(Temp), "\rYour Point:\y %d", point) new menu = menu_create(Temp, "handler_t") new szItemName[64] for(new i; i<sizeof szTRItems && i<sizeof g_szCostTR; i++) { if( point < g_szCostTR[i] ) { formatex(szItemName, charsmax(szItemName), "\d%s (%d)", szTRItems[ i ], g_szCostTR[ i ]) } else { formatex(szItemName, charsmax(szItemName), "%s \y(%d)", szTRItems[ i ], g_szCostTR[ i ]) } menu_additem(menu , szItemName) } menu_display(id , menu , 0) } // CT menu handler public handler_ct(id, menu, item) { if( item == MENU_EXIT ) { menu_destroy(menu) return PLUGIN_HANDLED } new point = get_user_point(id); new new_point = get_user_point(id) - g_szCostCT[item] if( point < g_szCostCT[item] ) { NotEnoughMoney( id ) menu_display(id, menu) return PLUGIN_HANDLED } switch(item) { case 0: { give_item(id , "weapon_m249") cs_set_user_bpammo(id , CSW_M249 , 200) set_user_point(id , new_point) } case 1: { cs_set_user_money(id , cs_get_user_money(id) + 10000) set_user_point(id , new_point) } case 2: { cs_set_user_money(id , cs_get_user_money(id) + 5000) set_user_point(id , new_point) } case 3: { set_user_health(id , get_user_health(id) + 50) set_user_point(id , new_point) } case 4: { set_user_armor(id , get_user_armor(id) + 50) set_user_point(id , new_point) } case 5: { give_item(id , "weapon_hegrenade") set_user_point(id , new_point) } } menu_destroy(menu) return PLUGIN_HANDLED } // TR menu hadnler public handler_t(id, menu, item) { if( item == MENU_EXIT ) { menu_destroy(menu) return PLUGIN_HANDLED } new point = get_user_point(id); new new_point = get_user_point(id) - g_szCostTR[item] if( point < g_szCostTR[item] ) { NotEnoughMoney( id ) menu_display(id, menu) return PLUGIN_HANDLED } switch(item) { case 0: { cs_set_user_money(id , cs_get_user_money(id) + 10000) set_user_point(id , new_point) } case 1: { cs_set_user_money(id , cs_get_user_money(id) + 5000) set_user_point(id , new_point) } case 2: { give_item(id , "weapon_hegrenade") set_user_point(id , new_point) } case 3: { set_user_health(id , get_user_health(id) + 50) set_user_point(id , new_point) } case 4: { set_user_armor(id , get_user_armor(id) + 50) set_user_point(id , new_point) } } menu_destroy(menu) return PLUGIN_HANDLED } // Show them a message when they don't have enough money NotEnoughMoney( id ) { client_print(id, print_center, "#Cstrike_TitlesTXT_Not_Enough_Money") message_begin(MSG_ONE_UNRELIABLE, g_iBlinkAcct, .player=id) { write_byte(2) } message_end() } Print chat when u bought a vip 1h or /2h !g[Shop] !t%s !yJust Bought VIP for !g%s Hour. EVERYONE can see this chat Przeczytaj cały wpis
  2. Hello ! guys after i kill last ct or t i waiting 15 seconds then restart round i need it default pls (3second) after the sound Counter-Terrorists Wins then Round Restart help pls Przeczytaj cały wpis
  3. Simple AWP Crosshair HUDTested only in CS:GO Description - !cross command - when you have the awp in your hand an image (simulating the crosshair) appears to make the noscope better. Config: (the image is not included so you would have to do) Image in .vmt and .vtf Change: cl_show_overlay(i, "traplife/AWPcrosshair" Format(vmt, sizeof(vmt), "materials/traplife/AWPcrosshair.vmt"); Format(vtf, sizeof(vtf), "materials/traplife/AWPcrosshair.vtf"); THIS PLUGIN IS HALF DONE (I don't even know if it works properly) Well, the same as the other plugin, interference problem with the hitmarker. ▬▬ GitHub when I do to improve I will put it on github, for now it is a simple beta (I don't think it will update) ▬▬ Attached Files Gena-VipAwpCrosshair_v1.1.zip (5.5 KB) Wyświetl pełny artykuł
  4. Simple Speed Meeter HUDTested only in CS:GO Well, I bring this because I did it and it works correctly, but not for my server, since it interferes with the hud with my other plugin and the spawn protection. (if someone wants to fix it just send it to me and I'll upload it here) To improve -put km/h -fix interference ▬▬ GitHub when I do to improve I will put it on github, for now it is a simple beta (I don't think it will update) ▬▬ Attached Files gena_SimpleSpeedMeeter_v1.3.zip (3.9 KB) Wyświetl pełny artykuł
  5. Hi, did somebody try to make a fix for that? E.g. map Fort Noesis (L4D1). When you load 1st map it always spawn players stucked underground. Przeczytaj cały wpis
  6. Hi. I need Player models menu.I know it's already has been created but i want to add XP. If player has reached Required XP for each player then they can select it and also need the models for Admins ( It means please don't forget to add admin flags ).And i need it just for humans ( CT's ) because i need it for basebuilder server.I tryed to find it on everywhere but i can't find it.If you guys like my idea so please make it. Przeczytaj cały wpis
  7. Hey, can not find plugin when the player dies appears ghost, I found a similar one https://forums.alliedmods.net/showthread.php?t=148884 but i don't need 3d effect or /ghost cmd all I need after death just an effect Przeczytaj cały wpis
  8. Sounds like Skittles Taste the Rainbow but believe it or not there are multiple pugs being held almost every day in TFC. Would be pretty cool to have a simple plugin that lets team captains choose players and have simple .ready commands. .noclip Przeczytaj cały wpis
  9. CL Forcer [ Force Client To Download-Table ] ( 1.0.1 ) .:[ ConVars ]:. Spoiler Code: // Choose What To Do With Them || 1= Kick Them From The Server || 2= Send Them To Spec // - // Default: "2" sm_force_method "2" // Only People With cl_allowdownload 1 Enter The Server || 1= Yes || 0= No // - // Default: "1" // Minimum: "0.000000" // Maximum: "1.000000" sm_cl_allowdownload "1" // Only People With cl_allowupload 1 Enter The Server || 1= Yes || 0= No // - // Default: "0" // Minimum: "0.000000" // Maximum: "1.000000" sm_cl_allowupload "0" // Only People With cl_downloadfilter all Enter The Server || 1= Yes || 0= No // - // Default: "1" // Minimum: "0.000000" // Maximum: "1.000000" sm_cl_downloadfilter "1" .:[ Change Log ]:. Spoiler 1.0.1 -Fix Bug -Added Force Spec 1.0.0 - Initial Release .:[ Download ]:. GitHub || Download Wyświetl pełny artykuł
  10. Hello, I Want. A Plugin That If Any Admin Types /random in chat The Plugin will Give A Random one Player Name out of max players acess : ADMIN_KICK NOTE : That's For Events Purpose Of The Server Przeczytaj cały wpis
  11. About:Simply deletes common infected from spawning if there are currently more than the z_common_limit cvar value alive. Thanks:vikingo12 - For the request. Changes: Code: 1.0 (27-Jun-2022) - Initial release. Installation:Click "Get Plugin" and put the .smx file into your servers \addons\sourcemod\plugins\ folder. Attached Files Get Plugin or Get Source (l4d_common_limiter.sp - 4.0 KB) Wyświetl pełny artykuł
  12. I need a plugin where vips and admins with a given flag (ADMIN_KICK) can type /buy in-game and open a menu where they can buy, for example: M4 AK47 M4 + AWP AK47 + AWP This way players may hold two primary weapons, CT's would have access to buy AK47 and such. I searched for something similar but found nothing. Thanks! Przeczytaj cały wpis
  13. Hello, I Want A Plugin In Which I can Make Walls In Map that Block a way in map and it should be not visible/invisible wall Przeczytaj cały wpis
  14. Hi, can anyone help me with a source of zombie light class from zombie 4 darkness for zombie plague 4.3? I found a source but is not compatible. if it's possible, I would like a delay of 30 seconds between abilitie #include <amxmodx> #include <amxmisc> #include <engine> #include <fakemeta> #include <fakemeta_util> #include <hamsandwich> #include <ZombieDarkness> #define PLUGIN "[ZD] Zombie Class: Light" #define VERSION "1.0" #define AUTHOR "Dias Pendragon" #define GAME_FOLDER "ZombieDarkness" #define SETTING_FILE "ZombieDarkness_Classes.ini" #define LANG_FILE "ZombieDarkness.txt" #define TIME_INTERVAL 0.25 #define TASK_CHECKTIME 3125365 #define Get_BitVar(%1,%2) (%1 & (1 << (%2 & 31))) #define Set_BitVar(%1,%2) %1 |= (1 << (%2 & 31)) #define UnSet_BitVar(%1,%2) %1 &= ~(1 << (%2 & 31)) #define HUD_ADRENALINE_X -1.0 #define HUD_ADRENALINE_Y 0.83 new g_zombieclass new zclass_name[16], zclass_desc[32] new Float:zclass_speed, Float:zclass_gravity, Float:zclass_knockback, Float:zclass_defense, zclass_healthregen new zclass_model[16], zclass_clawmodel[32], zclass_deathsound[64], zclass_painsound1[64], zclass_painsound2[64], zclass_stunsound[64], zclass_cost new g_IsUserAlive, g_BotHamRegister, g_IsUserBot new Float:InvisibleTime, InvisibleDecPer015S, Invisible_ClawModel[64], Invisible_Sound[64] new LeapPower, LeapHigh, LeapSound[64] new g_InvisibleSkill, g_Leaping, Float:CheckTime[33], Float:CheckTime2[33], Float:CheckTime3[33], g_PlayerKey[33][2] new g_MsgScreenFade, g_GameStart, g_SkillHud, g_InvisiblePercent[33] // Auto Skill #define AUTO_TIME random_float(15.0, 30.0) #define TASK_AUTO 4965 public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_event("DeathMsg", "Event_Death", "a") RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn_Post", 1) register_forward(FM_CmdStart, "fw_CmdStart") g_SkillHud = CreateHudSyncObj(3) g_MsgScreenFade = get_user_msgid("ScreenFade") } public plugin_precache() { register_dictionary(LANG_FILE) Load_Class_Setting() g_zombieclass = zd_register_zombieclass(zclass_name, zclass_desc, zclass_speed, zclass_gravity, zclass_knockback, zclass_defense, zclass_healthregen, zclass_model, zclass_clawmodel, zclass_deathsound, zclass_painsound1, zclass_painsound2, zclass_stunsound, zclass_cost) } public Load_Class_Setting() { static Temp[8] formatex(zclass_name, sizeof(zclass_name), "%L", LANG_SERVER, "ZOMBIE_CLASS_LIGHT_NAME") formatex(zclass_desc, sizeof(zclass_desc), "%L", LANG_SERVER, "ZOMBIE_CLASS_LIGHT_DESC") Setting_Load_String(SETTING_FILE, "Zombie Class", "CLASS_LIGHT_SPEED", Temp, sizeof(Temp)); zclass_speed = str_to_float(Temp) Setting_Load_String(SETTING_FILE, "Zombie Class", "CLASS_LIGHT_GRAVITY", Temp, sizeof(Temp)); zclass_gravity = str_to_float(Temp) Setting_Load_String(SETTING_FILE, "Zombie Class", "CLASS_LIGHT_KNOCKBACK", Temp, sizeof(Temp)); zclass_knockback = str_to_float(Temp) Setting_Load_String(SETTING_FILE, "Zombie Class", "CLASS_LIGHT_DEFENSE", Temp, sizeof(Temp)); zclass_defense = str_to_float(Temp) zclass_healthregen = Setting_Load_Int(SETTING_FILE, "Zombie Class", "CLASS_LIGHT_HEALTHREGEN") Setting_Load_String(SETTING_FILE, "Zombie Class", "CLASS_LIGHT_MODEL", zclass_model, sizeof(zclass_model)) Setting_Load_String(SETTING_FILE, "Zombie Class", "CLASS_LIGHT_CLAWMODEL", zclass_clawmodel, sizeof(zclass_clawmodel)) Setting_Load_String(SETTING_FILE, "Zombie Class", "CLASS_LIGHT_DEATHSOUND", zclass_deathsound, sizeof(zclass_deathsound)) Setting_Load_String(SETTING_FILE, "Zombie Class", "CLASS_LIGHT_PAINSOUND1", zclass_painsound1, sizeof(zclass_painsound1)) Setting_Load_String(SETTING_FILE, "Zombie Class", "CLASS_LIGHT_PAINSOUND2", zclass_painsound2, sizeof(zclass_painsound2)) Setting_Load_String(SETTING_FILE, "Zombie Class", "CLASS_LIGHT_STUNSOUND", zclass_stunsound, sizeof(zclass_stunsound)) zclass_cost = Setting_Load_Int(SETTING_FILE, "Zombie Class", "CLASS_LIGHT_COST") // Skill Setting_Load_String(SETTING_FILE, "Zombie Light", "INVISIBLE_TIME", Temp, sizeof(Temp)); InvisibleTime = str_to_float(Temp) InvisibleDecPer015S = Setting_Load_Int(SETTING_FILE, "Zombie Light", "INVISIBLE_DECREASE_PER015SEC") Setting_Load_String(SETTING_FILE, "Zombie Light", "INVISIBLE_CLAWMODEL", Invisible_ClawModel, sizeof(Invisible_ClawModel)) Setting_Load_String(SETTING_FILE, "Zombie Light", "INVISIBLE_SOUND", Invisible_Sound, sizeof(Invisible_Sound)) LeapPower = Setting_Load_Int(SETTING_FILE, "Zombie Light", "LEAP_POWER") LeapHigh = Setting_Load_Int(SETTING_FILE, "Zombie Light", "LEAP_HIGH") Setting_Load_String(SETTING_FILE, "Zombie Light", "LEAP_SOUND", LeapSound, sizeof(LeapSound)) // Precache engfunc(EngFunc_PrecacheModel, Invisible_ClawModel) engfunc(EngFunc_PrecacheSound, Invisible_Sound) engfunc(EngFunc_PrecacheSound, LeapSound) } public zd_game_start() g_GameStart = 1 public zd_round_end() g_GameStart = 0 public zd_user_spawned(id, Zombie) Reset_Skill(id) public zd_user_infected(id) Reset_Skill(id) public client_disconnect(id) UnSet_BitVar(g_IsUserAlive, id) public client_putinserver(id) { UnSet_BitVar(g_IsUserBot, id) if(!g_BotHamRegister && is_user_bot(id)) { g_BotHamRegister = 1 set_task(0.1, "Bot_RegisterHam", id) } if(is_user_bot(id)) Set_BitVar(g_IsUserBot, id) UnSet_BitVar(g_IsUserAlive, id) } public Bot_RegisterHam(id) { RegisterHamFromEntity(Ham_Spawn, id, "fw_PlayerSpawn_Post", 1) } public fw_PlayerSpawn_Post(id) { if(!is_user_alive(id)) return remove_task(id+TASK_AUTO) Set_BitVar(g_IsUserAlive, id) } public Event_Death() { static Victim; Victim = read_data(2); UnSet_BitVar(g_IsUserAlive, Victim) } public zd_zombieclass_active(id, ClassID) { if(ClassID != g_zombieclass) return Reset_Skill(id) if(is_user_bot(id)) set_task(AUTO_TIME, "AutoTime", id+TASK_AUTO) } public zd_zombieclass_unactive(id, ClassID) { if(ClassID != g_zombieclass) return Reset_Skill(id) } public zd_zombie_stun(id) Reset_Skill(id) public zd_zombie_slowdown(id) Reset_Skill(id) public Reset_Skill(id) { UnSet_BitVar(g_InvisibleSkill, id) UnSet_BitVar(g_Leaping, id) g_InvisiblePercent[id] = 0 Reset_Key(id) } public AutoTime(id) { id -= TASK_AUTO if(!Get_BitVar(g_IsUserAlive, id)) return if(!zd_get_user_zombie(id)) return if(zd_get_user_zombieclass(id) != g_zombieclass) return if(Get_BitVar(g_Leaping, id)) return if(zd_get_zombie_stun(id) || zd_get_zombie_slowdown(id)) return if(zd_get_user_power(id) < LeapPower) return Active_Leap(id) if(is_user_bot(id)) set_task(AUTO_TIME, "AutoTime", id+TASK_AUTO) } public client_PreThink(id) { if(!Get_BitVar(g_IsUserAlive, id)) return static CurButton; CurButton = pev(id, pev_button) static OldButton; OldButton = pev(id, pev_oldbuttons) if((CurButton & IN_FORWARD)) { if(!g_GameStart) return if(!zd_get_user_zombie(id)) return if(zd_get_user_zombieclass(id) != g_zombieclass) return if(zd_get_zombie_stun(id) || zd_get_zombie_slowdown(id)) return if(Get_BitVar(g_InvisibleSkill, id) && (get_gametime() - 0.15 > CheckTime[id])) { if(zd_get_user_power(id) <= 0) { Deactive_InvisibleSkill(id) return } if((pev(id, pev_flags) & FL_DUCKING) || pev(id, pev_bInDuck) || !(pev(id, pev_flags) & FL_ONGROUND)) { Deactive_InvisibleSkill(id) return } static Float:RenderAmt; pev(id, pev_renderamt, RenderAmt) if(RenderAmt > 0) { RenderAmt -= ((255.0 / InvisibleTime) * 0.15) if(RenderAmt < 0.0) { RenderAmt = 0.0 set_pev(id, pev_viewmodel2, Invisible_ClawModel) } g_InvisiblePercent[id] = floatround(((255.0 - RenderAmt) / 255.0) * 100.0) set_pev(id, pev_renderamt, RenderAmt) } // Handle Other if(!zd_get_hudfastupdate(id)) zd_set_hudfastupdate(id, 1) if(zd_get_user_status(id, STATUS_SPEED) != SPEED_INC) zd_set_user_status(id, STATUS_SPEED, SPEED_INC) if(zd_get_user_status(id, STATUS_STRENGTH) != STRENGTH_WEAKENING) zd_set_user_status(id, STATUS_STRENGTH, STRENGTH_WEAKENING) zd_set_user_power(id, zd_get_user_power(id) - InvisibleDecPer015S) CheckTime[id] = get_gametime() } if(Get_BitVar(g_InvisibleSkill, id) && (get_gametime() - 0.675 > CheckTime2[id])) { zd_set_fakeattack(id) //set_pev(id, pev_framerate, 2.0) set_pev(id, pev_sequence, 111) CheckTime2[id] = get_gametime() } if(OldButton & IN_FORWARD) return if(!task_exists(id+TASK_CHECKTIME)) { g_PlayerKey[id][0] = 'w' remove_task(id+TASK_CHECKTIME) set_task(TIME_INTERVAL, "Recheck_Key", id+TASK_CHECKTIME) } else { g_PlayerKey[id][1] = 'w' } } else { if(OldButton & IN_FORWARD) { Deactive_InvisibleSkill(id) } return } if(equali(g_PlayerKey[id], "ww")) { Reset_Key(id) Active_InvisibleSkill(id) } return } public client_PostThink(id) { if(!Get_BitVar(g_IsUserAlive, id)) return if(!Get_BitVar(g_Leaping, id)) return if(!zd_get_user_zombie(id)) return static Float:flFallVelocity; flFallVelocity = get_pdata_float(id, 251, 5) if(flFallVelocity && pev(id, pev_flags) & FL_ONGROUND) { Set_WeaponAnim(id, 7) UnSet_BitVar(g_Leaping, id) } } public fw_CmdStart(id, UCHandle, Seed) { if(!Get_BitVar(g_IsUserAlive, id)) return if(Get_BitVar(g_IsUserBot, id)) return if(!zd_get_user_zombie(id)) return if(zd_get_user_zombieclass(id) != g_zombieclass) return static CurButton; CurButton = get_uc(UCHandle, UC_Buttons) if(get_gametime() - 1.0 > CheckTime3[id]) { static Time; Time = zd_get_user_power(id) / LeapPower static Hud[64], SkillName[16]; formatex(SkillName, sizeof(SkillName), "%L", LANG_SERVER, "ZOMBIE_CLASS_LIGHT_SKILL") formatex(Hud, sizeof(Hud), "%L", LANG_SERVER, "HUD_ZOMBIESKILL_INV", g_InvisiblePercent[id]) if(Time >= 1) formatex(Hud, sizeof(Hud), "%s^n%L", Hud, LANG_SERVER, "HUD_ZOMBIESKILL", SkillName, Time) set_hudmessage(200, 200, 200, HUD_ADRENALINE_X, HUD_ADRENALINE_Y - 0.04, 0, 1.0, 1.0, 0.0, 0.0) ShowSyncHudMsg(id, g_SkillHud, Hud) CheckTime3[id] = get_gametime() } if((CurButton & IN_ATTACK2)) { CurButton &= ~IN_ATTACK2 set_uc(UCHandle, UC_Buttons, CurButton) if(!g_GameStart) { set_pdata_float(id, 83, 0.5, 5) return } if(Get_BitVar(g_InvisibleSkill, id)) { set_pdata_float(id, 83, 0.5, 5) return } if(zd_get_zombie_stun(id) || zd_get_zombie_slowdown(id)) { set_pdata_float(id, 83, 0.5, 5) return } if(zd_get_user_power(id) < LeapPower) { set_pdata_float(id, 83, 0.5, 5) return } if((pev(id, pev_flags) & FL_DUCKING) || pev(id, pev_bInDuck) || !(pev(id, pev_flags) & FL_ONGROUND)) { set_pdata_float(id, 83, 0.5, 5) return } if(get_pdata_float(id, 83, 5) > 0.0) return Active_Leap(id) } } public Reset_Key(id) { g_PlayerKey[id][0] = 0 g_PlayerKey[id][1] = 0 } public Recheck_Key(id) { id -= TASK_CHECKTIME if(!is_user_connected(id)) return Reset_Key(id) } public Active_InvisibleSkill(id) { Set_BitVar(g_InvisibleSkill, id) emit_sound(id, CHAN_VOICE, Invisible_Sound, 1.0, ATTN_NORM, 0, PITCH_NORM) if(zd_get_user_nvg(id, 1, 0)) { // ScreenFade message_begin(MSG_ONE_UNRELIABLE, g_MsgScreenFade, _, id) write_short(0) // duration write_short(0) // hold time write_short(0x0004) // fade type write_byte(255) // r write_byte(0) // g write_byte(0) // b write_byte(35) // alpha message_end() } set_pev(id, pev_rendermode, kRenderTransAlpha) set_pev(id, pev_renderfx, kRenderFxNone) set_pev(id, pev_renderamt, 255.0) } public Deactive_InvisibleSkill(id) { if(!Get_BitVar(g_InvisibleSkill, id)) return UnSet_BitVar(g_InvisibleSkill, id) g_InvisiblePercent[id] = 0 // Reset if(zd_get_user_nvg(id, 1, 0)) { message_begin(MSG_ONE_UNRELIABLE, g_MsgScreenFade, _, id) write_short(0) // duration write_short(0) // hold time write_short(0x0000) // fade type write_byte(0) // r write_byte(0) // g write_byte(0) // b write_byte(0) // alpha message_end() } // Speed zd_set_hudfastupdate(id, 0) zd_set_user_status(id, STATUS_SPEED, SPEED_NONE) zd_set_user_status(id, STATUS_STRENGTH, STRENGTH_NONE) set_pev(id, pev_rendermode, kRenderNormal) static ClawModel[64]; formatex(ClawModel, sizeof(ClawModel), "models/%s/%s", GAME_FOLDER, zclass_clawmodel) set_pev(id, pev_viewmodel2, ClawModel) } public Active_Leap(id) { static Float:Origin1[3], Float:Origin2[3] pev(id, pev_origin, Origin1) Set_BitVar(g_Leaping, id) zd_set_user_power(id, zd_get_user_power(id) - LeapPower) zd_set_fakeattack(id) // Climb Action Set_WeaponAnim(id, 6) set_pev(id, pev_framerate, 0.5) set_pev(id, pev_sequence, 113) set_pdata_float(id, 83, 3.0, 5) get_position(id, 180.0, 0.0, 650.0, Origin2) static Float:Velocity[3]; Get_SpeedVector(Origin1, Origin2, float(LeapHigh), Velocity) set_pev(id, pev_velocity, Velocity) emit_sound(id, CHAN_STATIC, LeapSound, 1.0, ATTN_NORM, 0, PITCH_NORM) } public zd_user_nvg(id, On, Zombie) { if(!Zombie) return if(!Get_BitVar(g_InvisibleSkill, id)) return if(!On) { // ScreenFade message_begin(MSG_ONE_UNRELIABLE, g_MsgScreenFade, _, id) write_short(0) // duration write_short(0) // hold time write_short(0x0004) // fade type write_byte(255) // r write_byte(0) // g write_byte(0) // b write_byte(35) // alpha message_end() } } stock Setting_Load_Int(const filename[], const setting_section[], setting_key[]) { if (strlen(filename) < 1) { log_error(AMX_ERR_NATIVE, "[ZD] Can't load settings: empty filename") return false; } if (strlen(setting_section) < 1 || strlen(setting_key) < 1) { log_error(AMX_ERR_NATIVE, "[ZD] Can't load settings: empty section/key") return false; } // Build customization file path new path[128] get_configsdir(path, charsmax(path)) format(path, charsmax(path), "%s/ZombieDarkness/%s", path, filename) // File not present if (!file_exists(path)) { static DataA[128]; formatex(DataA, sizeof(DataA), "[ZD] Can't load: %s", path) set_fail_state(DataA) return false; } // Open customization file for reading new file = fopen(path, "rt") // File can't be opened if (!file) return false; // Set up some vars to hold parsing info new linedata[1024], section[64] // Seek to setting's section while (!feof(file)) { // Read one line at a time fgets(file, linedata, charsmax(linedata)) // Replace newlines with a null character to prevent headaches replace(linedata, charsmax(linedata), "^n", "") // New section starting if (linedata[0] == '[') { // Store section name without braces copyc(section, charsmax(section), linedata[1], ']') // Is this our setting's section? if (equal(section, setting_section)) break; } } // Section not found if (!equal(section, setting_section)) { fclose(file) return false; } // Set up some vars to hold parsing info new key[64], current_value[32] // Seek to setting's key while (!feof(file)) { // Read one line at a time fgets(file, linedata, charsmax(linedata)) // Replace newlines with a null character to prevent headaches replace(linedata, charsmax(linedata), "^n", "") // Blank line or comment if (!linedata[0] || linedata[0] == ';') continue; // Section ended? if (linedata[0] == '[') break; // Get key and value strtok(linedata, key, charsmax(key), current_value, charsmax(current_value), '=') // Trim spaces trim(key) trim(current_value) // Is this our setting's key? if (equal(key, setting_key)) { static return_value // Return int by reference return_value = str_to_num(current_value) // Values succesfully retrieved fclose(file) return return_value } } // Key not found fclose(file) return false; } stock Setting_Load_StringArray(const filename[], const setting_section[], setting_key[], Array:array_handle) { if (strlen(filename) < 1) { log_error(AMX_ERR_NATIVE, "[ZD] Can't load settings: empty filename") return false; } if (strlen(setting_section) < 1 || strlen(setting_key) < 1) { log_error(AMX_ERR_NATIVE, "[ZD] Can't load settings: empty section/key") return false; } if (array_handle == Invalid_Array) { log_error(AMX_ERR_NATIVE, "[ZD] Array not initialized") return false; } // Build customization file path new path[128] get_configsdir(path, charsmax(path)) format(path, charsmax(path), "%s/ZombieDarkness/%s", path, filename) // File not present if (!file_exists(path)) { static DataA[128]; formatex(DataA, sizeof(DataA), "[ZD] Can't load: %s", path) set_fail_state(DataA) return false; } // Open customization file for reading new file = fopen(path, "rt") // File can't be opened if (!file) return false; // Set up some vars to hold parsing info new linedata[1024], section[64] // Seek to setting's section while (!feof(file)) { // Read one line at a time fgets(file, linedata, charsmax(linedata)) // Replace newlines with a null character to prevent headaches replace(linedata, charsmax(linedata), "^n", "") // New section starting if (linedata[0] == '[') { // Store section name without braces copyc(section, charsmax(section), linedata[1], ']') // Is this our setting's section? if (equal(section, setting_section)) break; } } // Section not found if (!equal(section, setting_section)) { fclose(file) return false; } // Set up some vars to hold parsing info new key[64], values[1024], current_value[128] // Seek to setting's key while (!feof(file)) { // Read one line at a time fgets(file, linedata, charsmax(linedata)) // Replace newlines with a null character to prevent headaches replace(linedata, charsmax(linedata), "^n", "") // Blank line or comment if (!linedata[0] || linedata[0] == ';') continue; // Section ended? if (linedata[0] == '[') break; // Get key and values strtok(linedata, key, charsmax(key), values, charsmax(values), '=') // Trim spaces trim(key) trim(values) // Is this our setting's key? if (equal(key, setting_key)) { // Parse values while (values[0] != 0 && strtok(values, current_value, charsmax(current_value), values, charsmax(values), ',')) { // Trim spaces trim(current_value) trim(values) // Add to array ArrayPushString(array_handle, current_value) } // Values succesfully retrieved fclose(file) return true; } } // Key not found fclose(file) return false; } stock Setting_Load_String(const filename[], const setting_section[], setting_key[], return_string[], string_size) { if (strlen(filename) < 1) { log_error(AMX_ERR_NATIVE, "[ZD] Can't load settings: empty filename") return false; } if (strlen(setting_section) < 1 || strlen(setting_key) < 1) { log_error(AMX_ERR_NATIVE, "[ZD] Can't load settings: empty section/key") return false; } // Build customization file path new path[128] get_configsdir(path, charsmax(path)) format(path, charsmax(path), "%s/ZombieDarkness/%s", path, filename) // File not present if (!file_exists(path)) { static DataA[128]; formatex(DataA, sizeof(DataA), "[ZD] Can't load: %s", path) set_fail_state(DataA) return false; } // Open customization file for reading new file = fopen(path, "rt") // File can't be opened if (!file) return false; // Set up some vars to hold parsing info new linedata[1024], section[64] // Seek to setting's section while (!feof(file)) { // Read one line at a time fgets(file, linedata, charsmax(linedata)) // Replace newlines with a null character to prevent headaches replace(linedata, charsmax(linedata), "^n", "") // New section starting if (linedata[0] == '[') { // Store section name without braces copyc(section, charsmax(section), linedata[1], ']') // Is this our setting's section? if (equal(section, setting_section)) break; } } // Section not found if (!equal(section, setting_section)) { fclose(file) return false; } // Set up some vars to hold parsing info new key[64], current_value[128] // Seek to setting's key while (!feof(file)) { // Read one line at a time fgets(file, linedata, charsmax(linedata)) // Replace newlines with a null character to prevent headaches replace(linedata, charsmax(linedata), "^n", "") // Blank line or comment if (!linedata[0] || linedata[0] == ';') continue; // Section ended? if (linedata[0] == '[') break; // Get key and value strtok(linedata, key, charsmax(key), current_value, charsmax(current_value), '=') // Trim spaces trim(key) trim(current_value) // Is this our setting's key? if (equal(key, setting_key)) { formatex(return_string, string_size, "%s", current_value) // Values succesfully retrieved fclose(file) return true; } } // Key not found fclose(file) return false; } stock Set_WeaponAnim(id, anim) { set_pev(id, pev_weaponanim, anim) message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, _, id) write_byte(anim) write_byte(0) message_end() } stock Get_SpeedVector(const Float:origin1[3],const Float:origin2[3],Float:speed, Float:new_velocity[3]) { new_velocity[0] = origin2[0] - origin1[0] new_velocity[1] = origin2[1] - origin1[1] new_velocity[2] = origin2[2] - origin1[2] new Float:num = floatsqroot(speed*speed / (new_velocity[0]*new_velocity[0] + new_velocity[1]*new_velocity[1] + new_velocity[2]*new_velocity[2])) new_velocity[0] *= (num * 2.0) new_velocity[1] *= (num * 2.0) new_velocity[2] *= (num / 2.0) } stock get_position(id,Float:forw, Float:right, Float:up, Float:vStart[]) { static Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vUp[3] pev(id, pev_origin, vOrigin) pev(id, pev_view_ofs, vUp) //for player xs_vec_add(vOrigin, vUp, vOrigin) pev(id, pev_v_angle, vAngle) // if normal entity ,use pev_angles vAngle[0] = 0.0 angle_vector(vAngle,ANGLEVECTOR_FORWARD, vForward) //or use EngFunc_AngleVectors angle_vector(vAngle,ANGLEVECTOR_RIGHT, vRight) angle_vector(vAngle,ANGLEVECTOR_UP, vUp) vStart[0] = vOrigin[0] + vForward[0] * forw + vRight[0] * right + vUp[0] * up vStart[1] = vOrigin[1] + vForward[1] * forw + vRight[1] * right + vUp[1] * up vStart[2] = vOrigin[2] + vForward[2] * forw + vRight[2] * right + vUp[2] * up } Przeczytaj cały wpis
  15. This plugin shows 1 frag in assist form. Plugin bug is when death by suicide is duplicated in deathmsg. PHP Code: /* -------------------------------------------------------------------------- Kill assist (for CS) v1.2b by Digi (a.k.a. Hunter-Digital) www.thehunters.ro ----------------------------------------------------------------- Description: When a player gets killed, this plugin checks if another player, from the same team, did enough damage to the victim so that he could be an accomplice to the kill and the assister will also receive a frag (all of these are cvar controlled) CVars and default values: - amx_killassist_enable 0/1/2 (default: 1) Enable modes: 0 = Disable / 1 = Enable with DeathMsg / 2 = Enable with HUD message - amx_killassist_mindamage 1-9999 (default: 50) Minimum amount of damage to deal to be nominated for an assisted kill - amx_killassist_givefrags 0/1 (default: 1) Give or not give the assister frags - amx_killassist_givemoney 0-16000 (default: 300) Give or not give the assister some money, 0 disables, 1 or more sets how much money - amx_killassist_onlyalive 0/1 (default: 0) Only alive players can be of assistance in killing other players Credits and thanks: - ConnorMcLeod - for helping with quick name changing - arkshine - for helping with name squeeze - joaquimandrade - code improvements - anakin_cstrike - code improvements - Nextra - more code improvements - ajvn - some ideas - Dores - and more code improvements - frearmer - hud message sugestion Changelog: v1.2b - modified public variable to "killassist_version" and fixed deathmsg not showing when you suicide with worldspawn or an entity v1.2 - added no-name-changing support, prints HUD message, to activate, set enabled to 2 v1.1b - simplified cvar checking using clamp() v1.1 - converted to CS only, new cvars: amx_killassist_onlyalive, amx_killassist_givemoney, enriched cvar handling, added team cache and fixed some bugs v1.0d - Removed useless stuff xD, added pcvar on amx_mode and used formatex() v1.0c - Some modifications and added g_bOnline v1.0b - Fixed admin name bug v1.0 - Release -------------------------------------------------------------- */ /* Feel free to modify these HUD message values */ #define HUD_colorR 255 // default: 255 #define HUD_colorG 155 // default: 155 #define HUD_colorB 0 // default: 0 #define HUD_posX 0.6 // default: 0.6 #define HUD_posY 0.2 // default: 0.2 #define HUD_fx 0 // default: 0 #define HUD_fxTime 0.0 // default: 0.0 #define HUD_holdTime 1.0 // default: 1.0 #define HUD_fadeInTime 0.3 // default: 0.3 #define HUD_fadeOutTime 2.0 // default: 2.0 #define HUD_channel -1 // default: -1 /* ------------------------------------------------------------------------- Nothing to edit below this point */ #include <amxmodx> #include <hamsandwich> #include <cstrike> #include <engine> #include <fun> #define PLUGIN_TITLE "Kill assist (for CS)" #define PLUGIN_VERSION "1.2b" #define PLUGIN_AUTHOR "Digi (www.thehunters.ro)" #define PLUGIN_PUBLICVAR "killassist_version" #define MAXPLAYERS 32 + 1 #define TEAM_NONE 0 #define TEAM_TE 1 #define TEAM_CT 2 #define TEAM_SPEC 3 #define is_player(%1) (1 <= %1 <= g_iMaxPlayers) new msgID_sayText new msgID_deathMsg new msgID_scoreInfo new msgID_money new pCVar_amxMode new pCVar_enabled new pCVar_minDamage new pCVar_giveFrags new pCVar_giveMoney new pCVar_onlyAlive new ch_pCVar_enabled new ch_pCVar_minDamage new ch_pCVar_giveFrags new ch_pCVar_giveMoney new ch_pCVar_onlyAlive new g_szName[MAXPLAYERS][32] new g_iTeam[MAXPLAYERS] new g_iDamage[MAXPLAYERS][MAXPLAYERS] new bool:g_bAlive[MAXPLAYERS] = {false, ...} new bool:g_bOnline[MAXPLAYERS] = {false, ...} new g_iLastAmxMode new g_iMaxPlayers = 0 new bool:g_bAmxModeExists = false public plugin_init() { register_plugin(PLUGIN_TITLE, PLUGIN_VERSION, PLUGIN_AUTHOR) register_cvar(PLUGIN_PUBLICVAR, PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY) pCVar_enabled = register_cvar("amx_killassist_enabled", "2") pCVar_minDamage = register_cvar("amx_killassist_mindamage", "50") pCVar_giveFrags = register_cvar("amx_killassist_givefrags", "1") pCVar_giveMoney = register_cvar("amx_killassist_givemoney", "300") pCVar_onlyAlive = register_cvar("amx_killassist_onlyalive", "0") if(cvar_exists("amx_mode")) { pCVar_amxMode = get_cvar_pointer("amx_mode") g_bAmxModeExists = true } msgID_money = get_user_msgid("Money") msgID_sayText = get_user_msgid("SayText") msgID_deathMsg = get_user_msgid("DeathMsg") msgID_scoreInfo = get_user_msgid("ScoreInfo") register_message(msgID_deathMsg, "msg_deathMsg") register_logevent("event_roundStart", 2, "1=Round_Start") register_event("Damage", "player_damage", "be", "2!0", "3=0", "4!0") register_event("DeathMsg", "player_die", "ae") register_event("TeamInfo", "player_joinTeam", "a") RegisterHam(Ham_Spawn, "player", "player_spawn", 1) g_iMaxPlayers = get_maxplayers() } public plugin_cfg() event_roundStart() public event_roundStart() { ch_pCVar_enabled = clamp(get_pcvar_num(pCVar_enabled), 0, 2) ch_pCVar_minDamage = clamp(get_pcvar_num(pCVar_minDamage), 0, 9999) ch_pCVar_giveFrags = clamp(get_pcvar_num(pCVar_giveFrags), 0, 1) ch_pCVar_giveMoney = clamp(get_pcvar_num(pCVar_giveMoney), 0, 16000) ch_pCVar_onlyAlive = clamp(get_pcvar_num(pCVar_onlyAlive), 0, 1) } public client_putinserver(iPlayer) { g_bOnline[iPlayer] = true get_user_name(iPlayer, g_szName[iPlayer], 31) } public client_disconnect(iPlayer) { g_iTeam[iPlayer] = TEAM_NONE g_bAlive[iPlayer] = false g_bOnline[iPlayer] = false } public player_joinTeam() { new iPlayer, szTeam[2] iPlayer = read_data(1) read_data(2, szTeam, 1) switch(szTeam[0]) { case 'T': g_iTeam[iPlayer] = TEAM_TE case 'C': g_iTeam[iPlayer] = TEAM_CT default: g_iTeam[iPlayer] = TEAM_SPEC // since you can't transfer yourself to unassigned team... } return PLUGIN_CONTINUE } public player_spawn(iPlayer) { if(!is_user_alive(iPlayer)) return HAM_IGNORED g_bAlive[iPlayer] = true // he's alive ! new szName[32] get_user_name(iPlayer, szName, 31) if(!equali(szName, g_szName[iPlayer])) // make sure he has his name ! { set_msg_block(msgID_sayText, BLOCK_ONCE) set_user_info(iPlayer, "name", g_szName[iPlayer]) } // reset damage meters for(new p = 1; p <= g_iMaxPlayers; p++) g_iDamage[iPlayer][p] = 0 return HAM_IGNORED } public player_damage(iVictim) { if(!ch_pCVar_enabled || !is_player(iVictim)) return PLUGIN_CONTINUE new iAttacker = get_user_attacker(iVictim) if(!is_player(iAttacker)) return PLUGIN_CONTINUE g_iDamage[iAttacker][iVictim] += read_data(2) return PLUGIN_CONTINUE } public player_die() { if(!ch_pCVar_enabled) return PLUGIN_CONTINUE new iVictim = read_data(2) new iKiller = read_data(1) new iHS = read_data(3) new szWeapon[24] read_data(4, szWeapon, 23) if(!is_player(iVictim)) { do_deathmsg(iKiller, iVictim, iHS, szWeapon) return PLUGIN_CONTINUE } g_bAlive[iVictim] = false if(!is_player(iKiller)) { do_deathmsg(iKiller, iVictim, iHS, szWeapon) return PLUGIN_CONTINUE } new iKillerTeam = g_iTeam[iKiller] if(iKiller != iVictim && g_iTeam[iVictim] != iKillerTeam) { new iKiller2 = 0 new iDamage2 = 0 for(new p = 1; p <= g_iMaxPlayers; p++) { if(p != iKiller && g_bOnline[p] && (ch_pCVar_onlyAlive && g_bAlive[p] || !ch_pCVar_onlyAlive) && iKillerTeam == g_iTeam[p] && g_iDamage[p][iVictim] >= ch_pCVar_minDamage && g_iDamage[p][iVictim] > iDamage2) { iKiller2 = p iDamage2 = g_iDamage[p][iVictim] } g_iDamage[p][iVictim] = 0 } if(iKiller2 > 0 && iDamage2 > ch_pCVar_minDamage) { if(ch_pCVar_giveFrags) { new iFrags = get_user_frags(iKiller2)+1 set_user_frags(iKiller2, iFrags) message_begin(MSG_ALL, msgID_scoreInfo) write_byte(iKiller2) write_short(iFrags) write_short(get_user_deaths(iKiller2)) write_short(0) write_short(iKillerTeam) message_end() } if(ch_pCVar_giveMoney) { new iMoney = cs_get_user_money(iKiller2) + ch_pCVar_giveMoney if(iMoney > 16000) iMoney = 16000 cs_set_user_money(iKiller2, iMoney) if(g_bAlive[iKiller2]) // no reason to send a money message when the player has no hud :} { message_begin(MSG_ONE_UNRELIABLE, msgID_money, _, iKiller2) write_long(iMoney) write_byte(1) message_end() } } if(ch_pCVar_enabled == 2) { new szName1[32], szName2[32], szName3[32], szMsg[128] get_user_name(iKiller, szName1, 31) get_user_name(iKiller2, szName2, 31) get_user_name(iVictim, szName3, 31) formatex(szMsg, 63, "%s killed %s assisted by %s", szName1, szName3, szName2) set_hudmessage(HUD_colorR, HUD_colorG, HUD_colorB, HUD_posX, HUD_posY, HUD_fx, HUD_fxTime, HUD_holdTime, HUD_fadeInTime, HUD_fadeOutTime, HUD_channel) show_hudmessage(0, szMsg) } else { new szName1[32], iName1Len, szName2[32], iName2Len, szNames[32], szWeaponLong[32] iName1Len = get_user_name(iKiller, szName1, 31) iName2Len = get_user_name(iKiller2, szName2, 31) g_szName[iKiller] = szName1 if(iName1Len < 14) { formatex(szName1, iName1Len, "%s", szName1) formatex(szName2, 28-iName1Len, "%s", szName2) } else if(iName2Len < 14) { formatex(szName1, 28-iName2Len, "%s", szName1) formatex(szName2, iName2Len, "%s", szName2) } else { formatex(szName1, 13, "%s", szName1) formatex(szName2, 13, "%s", szName2) } formatex(szNames, 31, "%s + %s", szName1, szName2) set_msg_block(msgID_sayText, BLOCK_ONCE) set_user_info(iKiller, "name", szNames) if(g_bAmxModeExists) { g_iLastAmxMode = get_pcvar_num(pCVar_amxMode) set_pcvar_num(pCVar_amxMode, 0) } if(equali(szWeapon, "grenade")) szWeaponLong = "weapon_hegrenade" else formatex(szWeaponLong, 31, "weapon_%s", szWeapon) new args[4] args[0] = iVictim args[1] = iKiller args[2] = iHS args[3] = get_weaponid(szWeaponLong) set_task(0.1, "player_diePost", 0, args, 4) } } else if(ch_pCVar_enabled == 1) do_deathmsg(iKiller, iVictim, iHS, szWeapon) } else if(ch_pCVar_enabled == 1) do_deathmsg(iVictim, iVictim, iHS, szWeapon) return PLUGIN_CONTINUE } public player_diePost(arg[]) { new szWeapon[24] new iKiller = arg[1] get_weaponname(arg[3], szWeapon, 23) replace(szWeapon, 23, "weapon_", "") do_deathmsg(iKiller, arg[0], arg[2], szWeapon) set_msg_block(msgID_sayText, BLOCK_ONCE) set_user_info(iKiller, "name", g_szName[iKiller]) if(g_bAmxModeExists) set_pcvar_num(pCVar_amxMode, g_iLastAmxMode) return PLUGIN_CONTINUE } public msg_deathMsg() return ch_pCVar_enabled == 1 ? PLUGIN_HANDLED : PLUGIN_CONTINUE /* originally from messages_stocks.inc, but simplified */ stock do_deathmsg(iKiller, iVictim, iHS, const szWeapon[]) { message_begin(MSG_ALL, msgID_deathMsg) write_byte(iKiller) write_byte(iVictim) write_byte(iHS) write_string(szWeapon) message_end() } /* -------------------------------------------------------------------------- EOF -------------------------------------------------------------- */ Przeczytaj cały wpis
×
×
  • Create New...