Sari la conținut
Urmăritori 0
cristiii.

NightCrawler Mod Update ( NightCrawler Class )

Postări recomandate

Descriere: Stiti si voi ce e nightcrawler mod

Descarcare: 
[sursa=1.0.0]/*

* Bomba a fost stearsa.
* Acum tero pot fii invizibili atata timp cat nu isi iau dmg sau nu au knife in mana // credite ConnorMcLeod
* Am facut team swap
* Acum night au viteza de 1000
* Acum cand un night primeste dmg nu mai este inv, dupa 2 secunde daca nu isi primeste iar dmg atunci o sa fie iar inv
* Acum nu se mai poate cumpara nimic din buy
*
*
*


*/
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <hamsandwich>
#include <fakemeta>
#include <fun>
#include <engine> 

#include <nightcrawler>

#define MAX_PLAYERS 32

new const   PLUGIN[ ] = "Nightcrawler Main",
            VERSION[ ] = "1.0",
            AUTHOR[ ] = "Diversity"

new Float:fl_NightGrav = 0.375,
    Float:fl_NightSpeed = 1000.0

new g_iPickUp = 2

public plugin_init() {
    
    register_plugin(PLUGIN, VERSION, AUTHOR)
    
    RegisterHam(Ham_Spawn, "player", "OnPlayerSpawn", 1)
    RegisterHam(Ham_Spawn, "hostage_entity", "Hostage_Spawn")
    RegisterHam(Ham_TakeDamage, "player", "OnPlayerTakeDamage", 1)
    RegisterHam(Ham_Item_PreFrame, "player", "Player_ResetMaxSpeed", 1) 
    RegisterHam(Ham_Touch, "weaponbox", "GroundWeapon_Touch")
    RegisterHam(Ham_Touch, "armoury_entity", "GroundWeapon_Touch")
    RegisterHam(Ham_Touch, "weapon_shield", "GroundWeapon_Touch")

    register_event("CurWeapon", "CurWeapon", "be", "1=1") 
    register_event("HLTV", "NewRound", "a", "1=0", "2=0")

    register_message(get_user_msgid("ScoreAttrib"), "Message_ScoreAttrib")  
    register_message(get_user_msgid("SendAudio"), "Message_SendAudio")   

    new enT = create_entity("info_target")
    set_pev(enT, pev_classname, "check_speed")
    set_pev(enT, pev_nextthink, get_gametime() + 0.1)
    register_think("check_speed", "Set_Night_INV") 

    if(get_cvar_float("sv_maxspeed") < fl_NightSpeed) set_cvar_float("sv_maxspeed", fl_NightSpeed) 
}

public plugin_precache()  { 
    new Entity = create_entity("info_map_parameters")
    
    DispatchKeyValue(Entity, "buying", "3")
    DispatchSpawn(Entity)
} 

public pfn_keyvalue(Entity)   { 
    new ClassName[20], 
        Anyf[2]
    copy_keyvalue(ClassName, charsmax(ClassName), Anyf, charsmax(Anyf), Anyf, charsmax(Anyf))
    
    if(equal(ClassName, "info_map_parameters")) { 
        remove_entity(Entity)
        return PLUGIN_HANDLED
    } 
    
    return PLUGIN_CONTINUE
}

public OnPlayerSpawn(playerid) {
    if(!is_user_connected(playerid)) return 

    strip_user_weapons_ex(playerid)

    if(__get_user_team(playerid) == Night) {
        set_user_rendering(playerid, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 0)
        set_user_footsteps(playerid, 1)
        set_user_gravity(playerid, fl_NightGrav)
    } else {
        set_user_rendering(playerid, kRenderFxNone, 0, 0, 0, kRenderNormal, 0)    
        set_user_footsteps(playerid, 0)
        set_user_gravity(playerid, 1.0)
    } 
}

public OnPlayerTakeDamage(iVictim, iInflictor, iAttacker, Float:flDamage, iBits) {
    if(is_user_connected(iAttacker) && is_user_connected(iVictim) && __get_user_team(iVictim) == Night) {
        remove_task(10000 + iVictim)
        
        set_user_rendering(iVictim, kRenderFxNone, 0, 0, 0, kRenderNormal, 0)    
        
        set_task(2.0, "SetInv", iVictim + 10000) 
    }
}

public SetInv(asdasd) {
    new playerid = asdasd-10000
    set_user_rendering(playerid, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 0)
}

public Player_ResetMaxSpeed(playerid) {
    if(is_user_alive(playerid) && __get_user_team(playerid) == Night && get_user_maxspeed(playerid) != 1.0)
        set_pev(playerid, pev_maxspeed, fl_NightSpeed) 
} 

public GroundWeapon_Touch(iWeapon, playerid) {
    if(!is_user_connected(playerid) || !is_user_alive(playerid)) return HAM_SUPERCEDE
    if(!g_iPickUp) {
        remove_entity(iWeapon)
        return HAM_SUPERCEDE
    } 

    new iTeam = __get_user_team(playerid)
    if((iTeam == -1) ||    (iTeam == Night && g_iPickUp != 1) || (iTeam == AntiNight && g_iPickUp != 2)) return HAM_SUPERCEDE
    
    return HAM_IGNORED
}   

public NewRound() {
    TeamCH = 0
}

public Message_ScoreAttrib() {
    new iFlags = get_msg_arg_int(2)
    if(iFlags & (1<<1)) {
        iFlags &= ~(1<<1)
        set_msg_arg_int(2, 0, iFlags)
    }
} 

public Message_SendAudio(iMsgId, iMsgDest, playerid) {
    if(playerid) return 

    new iPlayers[32], 
         iNum,  
         iPlayer 

    new szSound[14]
    get_msg_arg_string(2, szSound, charsmax(szSound))
    get_players(iPlayers, iNum) 

    if(equal(szSound, "%!MRAD_ctwin")) { 
        for(new i = 0; i < iNum; i++) {
            iPlayer = iPlayers
            switch(__get_user_team(iPlayer)) {
                case AntiNight: cs_set_user_team(iPlayer, g_iNightTeam) 
                case Night: cs_set_user_team(iPlayer, g_iAntiNightTeam)
            }
            TeamCH = 1 
        } 
    }  
}  

public Hostage_Spawn(iHostage) {
    remove_entity(iHostage)
    return HAM_SUPERCEDE
} 

public CurWeapon(playerid) {

} 

public Set_Night_INV(iEnt) {
    entity_set_float(iEnt, EV_FL_nextthink, get_gametime() + 0.1)

    new iPlayers[MAX_PLAYERS], 
        iNum, 
        playerid

    get_players(iPlayers, iNum, "ae", g_iNightTeam == CS_TEAM_T ? "TERRORIST" : "CT")

    for(new i; i<iNum; i++) {
        playerid = iPlayers
        if(get_user_weapon(playerid) == CSW_KNIFE) set_user_rendering(playerid, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 0) 
        else set_user_rendering(playerid, kRenderFxNone, 0, 0, 0, kRenderNormal, 0)
    }
}

strip_user_weapons_ex(playerid) {
    strip_user_weapons(playerid) 
    give_item(playerid, "weapon_knife")
}[/sursa]
[sursa=1.0.0]#if defined _nightcrawler
  #endinput
#endif
#define _nightcrawler 

#include <cstrike> 

enum _:ItemRestriction {
    Night,
    AntiNight
} 

new CsTeams:g_iNightTeam = CS_TEAM_T,
    CsTeams:g_iAntiNightTeam = CS_TEAM_CT,
    TeamCH = 0

public team_change2() {
    switch(TeamCH) {
        case 0: return false 
        case 1: return true
        default: return false
    }
    return false
} 

__get_user_team(playerid) {
    new CsTeams:iTeam = cs_get_user_team(playerid)  

    if(iTeam == g_iNightTeam) return Night 
    else if(iTeam == g_iAntiNightTeam) return AntiNight
    else return -1

    return -1
}[/sursa]
[sursa=1.0.1]/*

* Bomba a fost stearsa.
* Acum tero pot fii invizibili atata timp cat nu isi iau dmg sau nu au knife in mana // credite ConnorMcLeod
* Am facut team swap
* Acum night au viteza de 1000
* Acum cand un night primeste dmg nu mai este inv, dupa 2 secunde daca nu isi primeste iar dmg atunci o sa fie iar inv
* Acum nu se mai poate cumpara nimic din buy
* Am sters viteza si gravitatia (cele default) pentru ca vor fi clase
*
*


*/
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <hamsandwich>
#include <fakemeta>
#include <fun>
#include <engine> 

#include <nightcrawler>

#define MAX_PLAYERS 32

new const   PLUGIN[ ] = "Nightcrawler Main",
            VERSION[ ] = "1.0.1",
            AUTHOR[ ] = "Diversity" 

new g_iPickUp = 2

public plugin_init() {
    
    register_plugin(PLUGIN, VERSION, AUTHOR)
    
    RegisterHam(Ham_Spawn, "player", "OnPlayerSpawn", 1)
    RegisterHam(Ham_Spawn, "hostage_entity", "Hostage_Spawn")
    RegisterHam(Ham_TakeDamage, "player", "OnPlayerTakeDamage", 1) 
    RegisterHam(Ham_Touch, "weaponbox", "GroundWeapon_Touch")
    RegisterHam(Ham_Touch, "armoury_entity", "GroundWeapon_Touch")
    RegisterHam(Ham_Touch, "weapon_shield", "GroundWeapon_Touch")

    register_event("CurWeapon", "CurWeapon", "be", "1=1") 
    register_event("HLTV", "NewRound", "a", "1=0", "2=0")

    register_message(get_user_msgid("ScoreAttrib"), "Message_ScoreAttrib")  
    register_message(get_user_msgid("SendAudio"), "Message_SendAudio")   

    new enT = create_entity("info_target")
    set_pev(enT, pev_classname, "check_speed")
    set_pev(enT, pev_nextthink, get_gametime() + 0.1)
    register_think("check_speed", "Set_Night_INV")  
}

public plugin_precache()  { 
    new Entity = create_entity("info_map_parameters")
    
    DispatchKeyValue(Entity, "buying", "3")
    DispatchSpawn(Entity)
} 

public pfn_keyvalue(Entity)   { 
    new ClassName[20], 
        Anyf[2]
    copy_keyvalue(ClassName, charsmax(ClassName), Anyf, charsmax(Anyf), Anyf, charsmax(Anyf))
    
    if(equal(ClassName, "info_map_parameters")) { 
        remove_entity(Entity)
        return PLUGIN_HANDLED
    } 
    
    return PLUGIN_CONTINUE
} 

public OnPlayerSpawn(playerid) {
    if(!is_user_connected(playerid)) return 

    strip_user_weapons_ex(playerid)

    if(__get_user_team(playerid) == Night) {
        set_user_rendering(playerid, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 0)
        set_user_footsteps(playerid, 1) 
    } else {
        set_user_rendering(playerid, kRenderFxNone, 0, 0, 0, kRenderNormal, 0)    
        set_user_footsteps(playerid, 0)
        set_user_gravity(playerid, 1.0)
    } 
}

public OnPlayerTakeDamage(iVictim, iInflictor, iAttacker, Float:flDamage, iBits) {
    if(is_user_connected(iAttacker) && is_user_connected(iVictim) && __get_user_team(iVictim) == Night) {
        remove_task(10000 + iVictim)
        
        set_user_rendering(iVictim, kRenderFxNone, 0, 0, 0, kRenderNormal, 0)    
        
        set_task(2.0, "SetInv", iVictim + 10000) 
    }
}

public SetInv(asdasd) {
    new playerid = asdasd-10000
    set_user_rendering(playerid, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 0)
} 

public GroundWeapon_Touch(iWeapon, playerid) {
    if(!is_user_connected(playerid) || !is_user_alive(playerid)) return HAM_SUPERCEDE
    if(!g_iPickUp) {
        remove_entity(iWeapon)
        return HAM_SUPERCEDE
    } 

    new iTeam = __get_user_team(playerid)
    if((iTeam == -1) ||    (iTeam == Night && g_iPickUp != 1) || (iTeam == AntiNight && g_iPickUp != 2)) return HAM_SUPERCEDE
    
    return HAM_IGNORED
}   

public NewRound() {
    TeamCH = 0
}

public Message_ScoreAttrib() {
    new iFlags = get_msg_arg_int(2)
    if(iFlags & (1<<1)) {
        iFlags &= ~(1<<1)
        set_msg_arg_int(2, 0, iFlags)
    }
} 

public Message_SendAudio(iMsgId, iMsgDest, playerid) {
    if(playerid) return 

    new iPlayers[32], 
         iNum,  
         iPlayer 

    new szSound[14]
    get_msg_arg_string(2, szSound, charsmax(szSound))
    get_players(iPlayers, iNum) 

    if(equal(szSound, "%!MRAD_ctwin")) { 
        for(new i = 0; i < iNum; i++) {
            iPlayer = iPlayers
            switch(__get_user_team(iPlayer)) {
                case AntiNight: cs_set_user_team(iPlayer, g_iNightTeam) 
                case Night: cs_set_user_team(iPlayer, g_iAntiNightTeam)
            }
            TeamCH = 1 
        } 
    }  
}  

public Hostage_Spawn(iHostage) {
    remove_entity(iHostage)
    return HAM_SUPERCEDE
} 

public CurWeapon(playerid) {

} 

public Set_Night_INV(iEnt) {
    entity_set_float(iEnt, EV_FL_nextthink, get_gametime() + 0.1)

    new iPlayers[MAX_PLAYERS], 
        iNum, 
        playerid

    get_players(iPlayers, iNum, "ae", g_iNightTeam == CS_TEAM_T ? "TERRORIST" : "CT")

    for(new i; i<iNum; i++) {
        playerid = iPlayers
        if(get_user_weapon(playerid) == CSW_KNIFE) set_user_rendering(playerid, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 0) 
        else set_user_rendering(playerid, kRenderFxNone, 0, 0, 0, kRenderNormal, 0)
    }
}

strip_user_weapons_ex(playerid) {
    strip_user_weapons(playerid) 
    give_item(playerid, "weapon_knife")
}[/sursa]
[sursa=1.0.1]#if defined _nightcrawler
  #endinput
#endif
#define _nightcrawler 

#include <cstrike> 

enum _:ItemRestriction {
    Night,
    AntiNight
}  

new CsTeams:g_iNightTeam = CS_TEAM_T,
    CsTeams:g_iAntiNightTeam = CS_TEAM_CT,
    TeamCH = 0

public team_change2() {
    switch(TeamCH) {
        case 0: return false 
        case 1: return true
        default: return false
    }
    return false
} 

__get_user_team(playerid) {
    new CsTeams:iTeam = cs_get_user_team(playerid)  

    if(iTeam == g_iNightTeam) return Night 
    else if(iTeam == g_iAntiNightTeam) return AntiNight
    else return -1

    return -1
}   

native register_night_class(name[], desc[], hp, speed, Float:grav)[/sursa]
[sursa=1.0.0]#include <amxmodx>
#include <cstrike>
#include <fakemeta>
#include <fun>
#include <hamsandwich>
 
#include <nightcrawler>

enum _:NightClassData {
    ClassName[32],
    ClassDesc[32],
    ClassHP,
    ClassSpeed,
    ClassGrav
}

new Array:g_NightClasses, 
    g_iTotalNightClasses, 
    g_NightSelectClassFwd

new g_FirstSpawn[33], 
    g_CurNightClass[33], 
    g_NextNightClass[33]

public plugin_precache() {

    register_plugin("NightCrawler Rase", "1.0", "Filip. & KronoS # GG") 

    g_NightClasses = ArrayCreate(NightClassData)
}  

public plugin_init() {

    if(!g_iTotalNightClasses)
        set_fail_state("This plugin can't run because no nightcrawler classes were found!")
    
    RegisterHam(Ham_Spawn, "player", "Event_PlayerSpawn", 1)
    register_event("CurWeapon", "Event_CurWeapon", "be", "1=1")
    
    register_clcmd("say /class", "Func_CmdChangeClass")
    register_clcmd("say_team /class", "Func_CmdChangeClass")
    
    g_NightSelectClassFwd = CreateMultiForward("night_class_selected", ET_IGNORE, FP_CELL, FP_CELL)
    
    set_task(120.0, "Func_DisplayInfo", _, _, _, "b")
}

public plugin_natives() {
    register_native("register_night_class", "native_register_night_class")
    register_native("get_user_night_class", "native_get_user_night_class")
    register_native("set_user_night_class", "native_set_user_night_class")
}

public client_putinserver(playerid) {

    g_CurNightClass[playerid] = 1
    g_NextNightClass[playerid] = 1
    g_FirstSpawn[playerid] = 1
}

public Event_PlayerSpawn(playerid) {
    
    if(!is_user_alive(playerid) || __get_user_team(playerid) != Night) return true

    if(g_FirstSpawn[playerid]) {    
        g_FirstSpawn[playerid] = 0
        Func_ShowNightClasses(playerid, .page = 0)
    }
    
    g_CurNightClass[playerid] = g_NextNightClass[playerid]
    
    new eItemData[NightClassData]
    new iClassIndex = g_CurNightClass[playerid] - 1
    ArrayGetArray(g_NightClasses, iClassIndex, eItemData)
    
    set_user_health(playerid, eItemData[ClassHP])
    set_user_gravity(playerid, Float:eItemData[ClassGrav])

    return true
}

public Event_CurWeapon(playerid) {
    
    if(!is_user_alive(playerid) || __get_user_team(playerid) != Night) return true
    
    new eItemData[NightClassData]
    new iClassIndex = g_CurNightClass[playerid] - 1
    ArrayGetArray(g_NightClasses, iClassIndex, eItemData)
    
    set_pev(playerid, pev_maxspeed, float(eItemData[ClassSpeed]))

    return true
}

public Func_CmdChangeClass(playerid) Func_ShowNightClasses(playerid, .page = 0 ) 
public Func_DisplayInfo() client_print(0, print_chat, "Type /class to change your nightcrawler class")

Func_ShowNightClasses(playerid, page) {
    
    if(!g_iTotalNightClasses) return true
    
    page = clamp(page, 0, (g_iTotalNightClasses - 1) / 7)
    
    new iMenu = menu_create("\rChoose a Nightcrawler class:", "Handler_ClassesMenu")
    
    new eItemData[NightClassData], szItem[64], szNum[3]
    
    for(new class = 0; class < g_iTotalNightClasses; class++) {
        
        ArrayGetArray(g_NightClasses, class, eItemData)
        
        if(class == (g_NextNightClass[playerid] - 1)) formatex(szItem, charsmax(szItem), "\d%s [%s]", eItemData[ClassName], eItemData[ClassDesc])
        else formatex(szItem, charsmax(szItem), "%s \y[%s]", eItemData[ClassName], eItemData[ClassDesc])
        
        num_to_str(class, szNum, charsmax(szNum))
        
        menu_additem(iMenu, szItem, szNum)
    }
    
    menu_display(playerid, iMenu, page)

    return true
}

public Handler_ClassesMenu(playerid, menu, item) {
    
    if(item == MENU_EXIT) {
        menu_destroy(menu)
        return
    }
    
    new iAccess, szNum[3], hCallback
    menu_item_getinfo(menu, item, iAccess, szNum, charsmax(szNum), _, _, hCallback)
    
    new iClassIndex = str_to_num(szNum)
    
    new eItemData[NightClassData]
    ArrayGetArray(g_NightClasses, iClassIndex, eItemData)
    
    g_NextNightClass[playerid] = str_to_num(szNum) + 1
    
    client_print(playerid, print_chat, "Your nightcrawler class after the next spawn will be %", eItemData[ClassName])
    client_print(playerid, print_chat, "HP: %i | Speed: %i | Gravity: %i", eItemData[ClassHP], eItemData[ClassSpeed], floatround(eItemData[ClassGrav] * 800.0))
    
    menu_destroy(menu)
    
    new iReturn
    ExecuteForward(g_NightSelectClassFwd, iReturn, playerid, iClassIndex)
}

public native_register_night_class(Plugin, iParams) {
    
    new eClassData[NightClassData]
    
    get_string(1, eClassData[ClassName], charsmax(eClassData[ClassName]))
    get_string(2, eClassData[ClassDesc], charsmax(eClassData[ClassDesc]))
    
    eClassData[ClassHP] = get_param(3)
    eClassData[ClassSpeed] = get_param(4)
    eClassData[ClassGrav] = get_param(5)
    
    ArrayPushArray(g_NightClasses, eClassData)
    
    g_iTotalNightClasses++
    
    return (g_iTotalNightClasses - 1)
}

public native_get_user_night_class(playerid) return g_CurNightClass[playerid]

public native_set_user_night_class(playerid, class) {
    
    if(class < 0 || class >= g_iTotalNightClasses) return 0
    
    g_NextNightClass[playerid] = class
    return 1
}[/sursa]
[sursa=exemplu de rasa]#include <amxmodx>
#include <nightcrawler>

new g_NightClassID 

public plugin_init()  g_NightClassID = register_night_class("Normal Nightcrawler [Balanced]", "Aceasta clasa este una de tip balansata.", 120, 670, 0.375)[/sursa]
Nume: NightCrawler
Versiune: 1.0.1
Link oficial:

Instalare:
1. Fisierul nume_plugin.sma il puneti in addons/amxmodx/scripting
2. Fisierul nume_plugin.amxx il puneti in addons/amxmodx/plugins
3. Intrati in fisierul addons/amxmodx/configs/plugins.ini si adaugati la urma:

nume_plugin.amxx


4. Alti pasi necesari....

Cvar-uri (se adauga in fisierul amxmodx\configs\amxx.cfg): 

  • amx_comanda VALOARE - descrierea comenzii respective 
    amx_comanda 20 - descrierea comenzii respective 
    amx_comanda X - orice alta comanda de care dispune pluginul respectiv

Comenzi administrative (se tasteaza in consola si trebuie sa fiti administrator):

  • amx_comanda nume/parte_din_nume - descrierea comenzii respective 
    amx_comanda valoare - descrierea comenzii respective 
    amx_comanda X - orice alta comanda de care dispune pluginul respectiv

Comenzi publice (se tasteaza in joc prin apasarea tastei Y):

  • /rules - afiseaza regulile
    /rank - afiseaza rankul
    /comanda - orice alta comanda de care dispune pluginul respectiv

Module necesare (se sterge ; din fata modulului de mai jos; acestea le gasiti in fisierul amxmodx\configs\modules.ini):
- CStrike
- Fun
- alte module necesare..

Distribuie postarea


Link către postare
Distribuie pe alte site-uri

Creează un cont sau autentifică-te ca să comentezi

Trebuie să fii membru ca să poți lăsa un comentariu

Creează un cont

Înregistrează-te în comunitatea noastră. E simplu!

Înregistrează un cont nou

Autentificare

Ai deja cont? Autentifică-te aici.

Autentifică-te acum
Urmăritori 0
HAPPYHALLOWEEN PUBZONE
  • Bine ai venit

    Nou pe FRAGS?

    Servere de jocuri, resurse și o comunitate de jucători. Contul e gratuit.

    • Servere de jocurigăsești rapid unde să joci CS 1.6, CS2 și nu numai
    • Ai server? Îl promovăm gratuitnumele-tău.frags.ro și loc în lista de servere
    • Resurse pentru jocuri630+ configuri, skin-uri, pluginuri și ghiduri
    • Jocuri gratuite și reduceriurmărești secțiunea și afli primul
    5.545 de membri s-au alăturat deja
    657 online acum
  • Distribuie

    Trimite subiectul prietenilor

    Trimite pe WhatsApp
  • Afiliere gratuită

    Afiliază-ți serverulîn comunitateaFRAGS

    cs.frags.ro
    Alegi tu domeniul: frags.ro sau pubzone.ro

    Gratuit. Pune marca domeniului (FRAGS.RO sau PUBZONE.RO) în numele serverului înainte de cerere și adresa se activează automat, pe loc.

    1. 1Redenumești serverul
    2. 2Trimiți cererea
    3. Activare automată
    CS 1.6CS2FiveMMinecraftRust+5
    3servere afiliate93jucători acum
  • 🏆 Top servere

    Clasamentul lunii · încă 26 zile

    Niciun vot încă luna asta. Primul vot duce serverul pe podium.

    Votează serverul tău
  • Server de Discord

    FRAGS

    8 online acum154 de membri
    • clorox bIeach
    • Glitch
    • Modjo944
    • p...
    • Zayon
    • kikiiplecat
    +2 alții online
×
×
  • Creează...