Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

ewciak - zdjęcie

ewciak

Rejestracja: 31.08.2011
Aktualnie: Nieaktywny
Poza forum Ostatnio: 26.11.2011 09:01
***--

#322876 Paczka [4FuN] by 8ball1

Napisane przez 8ball1 w 17.11.2011 13:59

Paczka [4fun] mojego autorstwa
Wersja AMX - 1.8.1
AMX pod system Linux


Dokładny opis znajdujących się w paczce pluginów:




Plugins.ini z paczki

; AMX Mod X plugins

; Admin Base - Always one has to be activated
admin.amxx             ; admin base (required for any admin-related)
;admin_sql.amxx         ; admin base - SQL version (comment admin.amxx)

; Basic
admincmd.amxx           ; basic admin console commands
adminhelp.amxx          ; help command for admin console commands
adminslots.amxx         ; slot reservation
multilingual.amxx       ; Multi-Lingual management

; Menus
menufront.amxx          ; front-end for admin menus
cmdmenu.amxx            ; command menu (speech, settings)
plmenu.amxx             ; players menu (kick, ban, client cmds.)
;telemenu.amxx          ; teleport menu (Fun Module required!)
mapsmenu.amxx           ; maps menu (vote, changelevel)
pluginmenu.amxx         ; Menus for commands/cvars organized by plugin

; Chat / Messages
adminchat.amxx          ; console chat commands
antiflood.amxx          ; prevent clients from chat-flooding the server
scrollmsg.amxx          ; displays a scrolling message
imessage.amxx           ; displays information messages
adminvote.amxx          ; vote commands

; Map related
;nextmap.amxx           ; displays next map in mapcycle
;mapchooser.amxx                ; allows to vote for next map
timeleft.amxx           ; displays time left on map

; Configuration
pausecfg.amxx           ; allows to pause and unpause some plugins
statscfg.amxx           ; allows to manage stats plugins via menu and commands

; Counter-Strike
restmenu.amxx           ; restrict weapons menu
statsx.amxx             ; stats on death or round end (CSX Module required!)
miscstats.amxx          ; bunch of events announcement for Counter-Strike
;stats_logging.amxx     ; weapons stats logging (CSX Module required!)

; Enable to use AMX Mod plugins
;amxmod_compat.amxx     ; AMX Mod backwards compatibility layer

; Custom - Add 3rd party plugins here



ad_manager.amxx         ;reklamy w sayu
admin_freelook.amxx     ;admin widzi wszystkich graczy
admin_spec_esp.amxx     ;wh dla admina po śmierci
bulletdamage.amxx               ;pokazuje zadane obrażenia
descriptive_fire_in_the_hole.amxx       ;pokazuje jaki granat został rzucony
dib.amxx        ;pokazuje linie skąd nas zabili
realnadedrops.amxx       ;wszystkie bronie po śmierci
polski_cs.amxx          ;spolszczony cs
afkbombtransfer.amxx    ;przerzuca pakę do gracza, który nie jest afk
ptb.amxx                        ;wyrównuje drużyny
reconnect_features.amxx ;przywraca staty i kase po 'reconnect'
runplanting.amxx                ;Ruszasz się podczas podkładania paki
sillyc4.amxx            ;Podkładanie paki na ścianach  
parachute.amxx          ;spadochron
amx_banconfig.amxx      ;ban na cfg
autoreload_on_newround.amxx     ;przeładowanie w nowej rundzie
alt_end_round_sounds.amxx       ;muzyka na koniec rundy
alt_end_round_sounds[old].amxx  ;muzyka na koniec rundy
hpk_pl.amxx     ;wyrzuca za wysoki ping
galileo.amxx            ;zaawansowany map_chooser
dead_talk.amxx          ;rozmowa po śmierci ze wszystkimi
grenade_trail.amxx      ;smuga za granatem
grenade_sack-0.4.1.amxx ;większa ilość granatów
knife_mod.amxx          ;wybór noży
show_ips.amxx           ;pokazuje IP
c4timer.amxx            ;nowy czas w odliczaniu bomby
amx_ex_changer.amxx     ;wymusza interp 0.01
flash.amxx                      ;pokazuje kto oślepił
ultimate_sounds.amxx    ;dźwięki typu HeadShot
gracz_rundy.amxx                ;pokazuje najbardziej raniącego i najelepszego gracza rundy
task_complete.amxx      ;trąbka na koniec rundy



CVARY z paczki

////Reconnect - reconnectFEATURES\\\\
amx_noreconnect_time 60
amx_noreconnect_score 1
amx_noreconnect_money 1
amx_noreconnect_startmoney 0
amx_noreconnect_spawn 1
amx_noreconnect_notify 0




////Spadochron - parachute\\\\
sv_parachute "1"
parachute_fallspeed "100"




////Edycja Spawnów- spawnPROTECTION\\\\
sv_sp 1
sv_sptime 3
sv_spmessage 0
sv_spshellthick 25




////roundSOUND\\\\
ers_enabled 1
ers_player_toggle 1
erc_time_ads 0
erc_random_precache 13-13




////Smuga za granatmi\\\\
grenade_tr 2 ( Optymalnie: 2 )
0 - wcale
1 - wybrane kolory
2 - odmienny/własny/specyficzny - nie jestem pewien
3 - teamu/druzyny
grenade_he "255000000" ustaw kolor dla granatu HE (255 000 000 - czerowny)
grenade_fb "000000255" ustaw kolor dla Flashbang (000 000 255 - niebieski)
grenade_sg "000255000" ustaw kolor dla Smokegrenade (000 255 000 - zielony)




////Dodatkowe granaty\\\\
mp_max_fb 2
mp_max_he 2
mp_max_sg 1




////Latarka na serwerze\\\\
mp_flashlight 1




////knife mod\\\\
km_highspeed 330 (ustawia szybkość dla Pocket Knife)
km_lowgravity 460 (ustawia niski ciężar właściwy)




////amx_ips\\\\
amx_ip_info 60




////C4 timer\\\\
amx_showc4timer 3 - Wyłączone | Tylko TT | Tylko CT | Wszyscy (Optymalnie: 3)
amx_showc4flash 0 - Sprite flashing (Optymalnie: 0)
amx_showc4sprite 1 - Choose from 2 sprites (Optymalnie: 1)
amx_showc4msg 0 - Shows a hud message about the timer (Optymalnie: 0)




DODATKOWE INFORMACJE
Paczki są w pełni gotowe do użycia ! Wszystkie CVARY, pliki z muzyką itd są już dodane. Wystarczy tylko skopiować na serwer i cieszyć się z gry :)

Dołączona grafika Zaktualizowane linki do paczek !
Dołączona grafika Problem z dodawaniem admina - ROZWIĄZANY !



DOWNLOAD
~ paczka 4FuN (bez amx'a) [7,94 MB]
paczka 4FuN (bez amx'a).rar

~ paczka 4FuN (z amx'em) [10,7 MB]
paczka 4FuN (z amx'em).rar

~ paczka 4FuN (z amx'em + dproto) [10,8 MB]
paczka 4FuN (z amx'em + dproto).rar




Czekam na Wasze opinie :)

Kopiowanie na inne fora ZABRONIONE !


  • +
  • -
  • 16


#322946 Klasa ninja==> brak niewidzialności

Napisane przez DarkGL w 17.11.2011 17:19

jest mały błąd w generatorze
Spoiler

  • +
  • -
  • 1


#322945 Klasa ninja==> brak niewidzialności

Napisane przez Cannabis w 17.11.2011 17:12

Teraz? :

Spoiler



#322895 Klasa ninja==> brak niewidzialności

Napisane przez Syczaj w 17.11.2011 15:23

Zmień kRenderFxGlowShell na kRenderFxNone, może pomoże. Nie zaglebialem sie nigdy w codmoda.

oprocz tego, moze jakies logi?
  • +
  • -
  • 1


#322910 Klasa ninja==> brak niewidzialności

Napisane przez Cannabis w 17.11.2011 15:59

Proszę

Załączone pliki




#322913 Klasa ninja==> brak niewidzialności

Napisane przez DarkGL w 17.11.2011 16:11

Nie zmieniłeś niewidzialności
Spoiler

  • +
  • -
  • 1


#312447 Problem z kompilacją

Napisane przez radim w 23.10.2011 14:40

#include <amxmodx>
#include <amxmisc>
#include <codmod>
#include <fakemeta>
#include <hamsandwich>
#include <cstrike>
#include <fun>
          
new const nazwa[]   = "Admiral(premium)";
new const opis[]        = "Ma podwojny skok, 20 hp oraz pelen magazynak za kazde zabojstwo. Natychmiastowe zabicie z noża (PPM).";
new const bronie        = (1<<CSW_HEGRENADE)|(1<<CSW_FAMAS)|(1<<CSW_DEAGLE);
new const zdrowie   = 30;
new const kondycja  = 38;
new const inteligencja = 0;
new const wytrzymalosc = 20;
  
new skoki[33];
new ostatnio_prawym[33];
new ma_klase[33];

new const maxClip[31] = { -1, 13, -1, 10,  1,  7,  1,  30, 30,  1,  30,  20,  25, 30, 35, 25,  12,  20,
10,  30, 100,  8, 30,  30, 20,  2,  7, 30, 30, -1,  50 };

public plugin_init()
{
register_plugin(nazwa, "1.0", "amxx.pl");
cod_register_class(nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc);
  
register_forward(FM_CmdStart, "fwCmdStart_MultiJump");

RegisterHam(Ham_TakeDamage, "player", "fwTakeDamage_JedenCios");
RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_knife", "fwPrimaryAttack_JedenCios");
RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_knife", "fwSecondaryAttack_JedenCios");
}
public cod_class_enabled(id)
{
if(!(get_user_flags(id) & ADMIN_LEVEL_H))
{
  client_print(id, print_chat, "[Admiral(premium)] Nie masz uprawnien, aby uzywac tej klasy.")
  return COD_STOP;
}
give_item(id, "weapon_hegrenade");
ma_klase[id] = true;
  
return COD_CONTINUE;
}
public cod_class_disabled(id)
{
ma_klase[id] = false;
}
public fwCmdStart_MultiJump(id, uc_handle)
{
if(!is_user_alive(id) || !ma_klase[id])
  return FMRES_IGNORED;
new flags = pev(id, pev_flags);
if((get_uc(uc_handle, UC_Buttons) & IN_JUMP) && !(flags & FL_ONGROUND) && !(pev(id, pev_oldbuttons) & IN_JUMP) && skoki[id])
{
  skoki[id]--;
  new Float:velocity[3];
  pev(id, pev_velocity,velocity);
  velocity[2] = random_float(265.0,285.0);
  set_pev(id, pev_velocity,velocity);
}
else if(flags & FL_ONGROUND)
  skoki[id] = 2;
return FMRES_IGNORED;
}
public fwTakeDamage_JedenCios(id, ent, attacker)
{
if(is_user_alive(attacker) && ma_klase[attacker] && get_user_weapon(attacker) == CSW_KNIFE && ostatnio_prawym[id])
{
  cs_set_user_armor(id, 0, CS_ARMOR_NONE);
  SetHamParamFloat(4, float(get_user_health(id) + 1));
  return HAM_HANDLED;
}
return HAM_IGNORED;
}
public fwPrimaryAttack_Knife(ent)
{
new id = pev(ent, pev_owner);
ostatnio_prawym[id] = 1;
}
public fwSecondaryAttack_Knife(ent)
{
new id = pev(ent, pev_owner);
ostatnio_prawym[id] = 0;
}

public DeathMsg()
{
new killer = read_data(1);
new victim = read_data(2);

if(!is_user_connected(killer))
  return PLUGIN_CONTINUE;

if(ma_klase[victim] && !ma_klase[killer])
  cod_set_user_xp(killer, cod_get_user_xp(killer)+10);

if(ma_klase[killer])
{
  new cur_health = pev(killer, pev_health);
  new Float:max_health = 100.0+cod_get_user_health(killer);
  new Float:new_health = cur_health+20.0<max_health? cur_health+20.0: max_health;
  set_pev(killer, pev_health, new_health);

  new weapon = get_user_weapon(killer);
  if(maxClip[weapon] != -1);
   set_user_clip(killer, maxClip[weapon]);
}


return PLUGIN_CONTINUE;
}

stock set_user_clip(id, ammo)
{
new weaponname[32], weaponid = -1, weapon = get_user_weapon(id, _, _);
get_weaponname(weapon, weaponname, 31);
while ((weaponid = engfunc(EngFunc_FindEntityByString, weaponid, "classname", weaponname)) != 0)
  if (pev(weaponid, pev_owner) == id) {
  set_pdata_int(weaponid, 51, ammo, 4);
  return weaponid;
}
return 0;
}
Brakowało:
new const maxClip[31] = { -1, 13, -1, 10,  1,  7,  1,  30, 30,  1,  30,  20,  25, 30, 35, 25,  12,  20,
10,  30, 100,  8, 30,  30, 20,  2,  7, 30, 30, -1,  50 };

  • +
  • -
  • 1


#310762 [ROZWIĄZANE] Errory w trakcie kompilacji pluginu

Napisane przez VerShinin w 20.10.2011 09:31

Sprawdź to czy dobrze działa ,)

Załączone pliki


  • +
  • -
  • 1


#310268 [ROZWIĄZANE] Reset lvli na klasie premium pod koniec rundy

Napisane przez radim w 18.10.2011 20:36

Wyrzuciłem kilka nie potrzebnych rzeczy:
#include <amxmodx>
#include <amxmisc>
#include <codmod>
#include <engine>
#include <hamsandwich>
#include <fakemeta>
#include <cstrike>
#include <fun>
          
new const nazwa[]   = "dotyk aniola (premium)";
new const opis[]        = "Masz komplet granatow, M4A1, AK47, Deagla. Do tego posiadasz 4 rakiety, podwojny skok i 1/4 szansy na natychmiastowe zabicie przeciwnika";
new const bronie        = 1<<CSW_HEGRENADE | 1<<CSW_SMOKEGRENADE | 1<<CSW_M4A1 | 1<<CSW_FLASHBANG | 1<<CSW_DEAGLE| 1<<CSW_AK47;
new const zdrowie   = 45;
new const kondycja  = 10;
new const inteligencja = 2;
new const wytrzymalosc = 0;
  
new sprite_blast;
new ilosc_rakiet_gracza[33];
new poprzednia_rakieta_gracza[33];
new skoki[33];
new ma_klase[33];
public plugin_init()
{
register_plugin(nazwa, "1.0", "amxx.pl");
cod_register_class(nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc);
register_touch("rocket", "*" , "DotykRakiety");
RegisterHam(Ham_Spawn, "player", "fwSpawn_Rakiety", 1);
  
register_forward(FM_CmdStart, "fwCmdStart_MultiJump");
  
RegisterHam(Ham_TakeDamage, "player", "fwTakeDamage_JedenZ");
}
public plugin_precache()
{
sprite_blast = precache_model("sprites/dexplo.spr");
precache_model("models/rpgrocket.mdl");
}
public client_disconnect(id)
{
new entRakiety = find_ent_by_class(0, "rocket");
while(entRakiety > 0)
{
  if(entity_get_edict(entRakiety, EV_ENT_owner) == id)
   remove_entity(entRakiety);
  entRakiety = find_ent_by_class(entRakiety, "rocket");
}
}
public cod_class_enabled(id)
{
if(!(get_user_flags(id) & ADMIN_LEVEL_G))
{
  client_print(id, print_chat, "[dotyk aniola] Nie masz uprawnien, aby uzywac tej klasy.")
  return COD_STOP;
}
ilosc_rakiet_gracza[id] = 4;
give_item(id, "weapon_hegrenade");
give_item(id, "weapon_flashbang");
give_item(id, "weapon_flashbang");
give_item(id, "weapon_smokegrenade");
ma_klase[id] = true;
  
return COD_CONTINUE;
}
public cod_class_disabled(id)
{
ma_klase[id] = false;
}
public cod_class_skill_used(id)
{
if (!ilosc_rakiet_gracza[id])
{
  client_print(id, print_center, "Wykorzystales juz wszystkie rakiety!");
}
else
{
  if(poprzednia_rakieta_gracza[id] + 2.0 > get_gametime())
  {
   client_print(id, print_center, "Rakiet mozesz uzywac co 2 sekundy!");
  }
  else
  {
   if (is_user_alive(id))
   {
        poprzednia_rakieta_gracza[id] = floatround(get_gametime());
        ilosc_rakiet_gracza[id]--;
        new Float: Origin[3], Float: vAngle[3], Float: Velocity[3];
        entity_get_vector(id, EV_VEC_v_angle, vAngle);
        entity_get_vector(id, EV_VEC_origin , Origin);
        new Ent = create_entity("info_target");
        entity_set_string(Ent, EV_SZ_classname, "rocket");
        entity_set_model(Ent, "models/rpgrocket.mdl");
        vAngle[0] *= -1.0;
        entity_set_origin(Ent, Origin);
        entity_set_vector(Ent, EV_VEC_angles, vAngle);
        entity_set_int(Ent, EV_INT_effects, 2);
        entity_set_int(Ent, EV_INT_solid, SOLID_BBOX);
        entity_set_int(Ent, EV_INT_movetype, MOVETYPE_FLY);
        entity_set_edict(Ent, EV_ENT_owner, id);
        VelocityByAim(id, 1000 , Velocity);
        entity_set_vector(Ent, EV_VEC_velocity ,Velocity);
   }
  }
}
}
public fwSpawn_Rakiety(id)
{
if(is_user_alive(id))
  ilosc_rakiet_gracza[id] = 4;
}
public DotykRakiety(ent)
{
if (!is_valid_ent(ent))
  return;
new attacker = entity_get_edict(ent, EV_ENT_owner);
 
new Float:fOrigin[3];
entity_get_vector(ent, EV_VEC_origin, fOrigin);
new iOrigin[3];
for(new i=0;i<3;i++)
  iOrigin[i] = floatround(fOrigin[i]);
message_begin(MSG_BROADCAST,SVC_TEMPENTITY, iOrigin);
write_byte(TE_EXPLOSION);
write_coord(iOrigin[0]);
write_coord(iOrigin[1]);
write_coord(iOrigin[2]);
write_short(sprite_blast);
write_byte(32);
write_byte(20);
write_byte(0);
message_end();
new entlist[33];
new numfound = find_sphere_class(ent, "player", 190.0, entlist, 32);
for (new i=0; i < numfound; i++)
{
  new pid = entlist[i];
  if (!is_user_alive(pid) || get_user_team(attacker) == get_user_team(pid))
   continue;
  cod_inflict_damage(attacker, pid, 55.0, 0.9, ent, (1<<24));
}
remove_entity(ent);
}
public fwCmdStart_MultiJump(id, uc_handle)
{
if(!is_user_alive(id) || !ma_klase[id])
  return FMRES_IGNORED;
new flags = pev(id, pev_flags);
if((get_uc(uc_handle, UC_Buttons) & IN_JUMP) && !(flags & FL_ONGROUND) && !(pev(id, pev_oldbuttons) & IN_JUMP) && skoki[id])
{
  skoki[id]--;
  new Float:velocity[3];
  pev(id, pev_velocity,velocity);
  velocity[2] = random_float(265.0,285.0);
  set_pev(id, pev_velocity,velocity);
}
else if(flags & FL_ONGROUND)
  skoki[id] = 2;
return FMRES_IGNORED;
}
public fwTakeDamage_JedenZ(this, idInf, idAtt, Float:fDmg, dmgBits){
if(!is_user_alive(idAtt) || !ma_klase[idAtt] || !(dmgBits & (1<<1) ) || random_num(1, 4) != 1 )
  return HAM_IGNORED;
cs_set_user_armor(this, 0, CS_ARMOR_NONE);
SetHamParamFloat(4, float(get_user_health(this) + 1));
return HAM_HANDLED;
}

  • +
  • -
  • 1


#310254 [ROZWIĄZANE] Reset lvli na klasie premium pod koniec rundy

Napisane przez radim w 18.10.2011 20:20

A czy resetuję Ci się level tylko w tej klasie i czy tylko Tobie czy całemu serwerowi i na wszystkich klasach ?
Zamień:
public cod_class_enabled(id, klasa)
{
if(!(get_user_flags(id) & ADMIN_LEVEL_G))
{
  client_print(id, print_chat, "[dotyk aniola] Nie masz uprawnien, aby uzywac tej klasy.")
  return COD_STOP;
}
ilosc_rakiet_gracza[id] = 4;
give_item(id, "weapon_hegrenade");
give_item(id, "weapon_flashbang");
give_item(id, "weapon_flashbang");
give_item(id, "weapon_smokegrenade");
ma_klase[id] = true;
  
return COD_CONTINUE;
}
public cod_class_disabled(id, klasa)
{
ma_klase[id] = false;
}

na:
public cod_class_enabled(id)
{
if(!(get_user_flags(id) & ADMIN_LEVEL_G))
{
  client_print(id, print_chat, "[dotyk aniola] Nie masz uprawnien, aby uzywac tej klasy.")
  return COD_STOP;
}
ilosc_rakiet_gracza[id] = 4;
give_item(id, "weapon_hegrenade");
give_item(id, "weapon_flashbang");
give_item(id, "weapon_flashbang");
give_item(id, "weapon_smokegrenade");
ma_klase[id] = true;
  
return COD_CONTINUE;
}
public cod_class_disabled(id)
{
ma_klase[id] = false;
}

  • +
  • -
  • 1


#310061 [ROZWIĄZANE] Ulepszenie i naprawa klasy premium Dotyk Anioła

Napisane przez speedkill w 18.10.2011 15:49

Stwórz klasę w generatorze ;)
Masz tam rakiety itp ;)
http://amxx.pl/generator-klas/
  • +
  • -
  • 1


#302896 Klasa lekki snajper i stopper

Napisane przez Gość w 03.10.2011 21:43

Przedstawiam dwie klasy

Lekki Snajper
Scout 1/2 szansy na zabicie
Cichy bieg

Stopper
XM1014 1/4 szansy na zabicie
Mała widoczność
Mała ilość bazowego HP

Załączone pliki




#257586 Awanse klas

Napisane przez Goliath w 10.06.2011 19:48

Na prośbę jednego z użytkowników zrobiłem system awansowania klas. Doszedłem do tego drogą prób i błędów, więc kod może nie być w pełni optymalny, ale przynajmniej działa Dołączona grafika.

Uwaga! Wymagana znajomość pojęcia "kompilacja lokalna". Jeżeli nie wiesz, co to jest, odwiedź ten temat - http://amxx.pl/topic...ilowac-pluginy/

1. Otwieramy plik QTM_CodMod.sma.
2. Do zmiennych globalnych dodajemy:
new awanse[MAX_ILOSC_KLAS+1][3], awansuje_do[MAX_ILOSC_KLAS+1], awansuje_z[MAX_ILOSC_KLAS+1];
new ilosc_awansow;

3. Na koniec pliku dopisujemy:
public ZarejestrujAwans(plugin, params)
{
if(params != 9)
return PLUGIN_CONTINUE;

if(++ilosc_klas > MAX_ILOSC_KLAS)
return -1;

pluginy_klas[ilosc_klas] = plugin;

new awans_z = get_param(1);
awansuje_do[awans_z] = ilosc_klas;
awansuje_z[ilosc_klas] = awans_z;
ilosc_awansow++;
awanse[ilosc_awansow][1] = ilosc_klas;
awanse[ilosc_awansow][0] = awans_z;
awanse[ilosc_awansow][2] = get_param(2);
get_string(3, nazwy_klas[ilosc_klas], MAX_WIELKOSC_NAZWY);
get_string(4, opisy_klas[ilosc_klas], MAX_WIELKOSC_OPISU);

bronie_klasy[ilosc_klas] = get_param(5);
zdrowie_klas[ilosc_klas] = get_param(6);
kondycja_klas[ilosc_klas] = get_param(7);
inteligencja_klas[ilosc_klas] = get_param(8);
wytrzymalosc_klas[ilosc_klas] = get_param(9);

return ilosc_klas;
}

public ZnajdzAwans(Z, Do)
{
new Return;
for(new i=1; i<=ilosc_awansow; i++)
{
if(awanse[i][0] == Z && awanse[i][1] == Do)
{
Return = i;
break;
}
}
return Return;
}

public JestAwansem(klasa)
{
new bool:jest;
for(new i=1; i<=ilosc_awansow; i++)
{
if(awanse[i][1] == klasa)
{
jest = true;
break;
}
}
return jest;
}

4. Do publica plugin_natives dodajemy:
register_native("cod_register_advance", "ZarejestrujAwans");

5. Zmieniamy public WybierzKlase na:
public WybierzKlase(id)
{
new menu = menu_create("Wybierz klase:", "WybierzKlase_Handle");

new klasa[50], dana_klasa, numer[10];
for(new i=1; i <= ilosc_klas; i++)
{
if(JestAwansem(i))
continue;
WczytajDane(id, i);
dana_klasa = i;

for(; ;)
{
if(awansuje_do[dana_klasa] && poziom_gracza[id] >= awanse[ZnajdzAwans(dana_klasa, awansuje_do[dana_klasa])][2])
{
dana_klasa = awansuje_do[dana_klasa];
WczytajDane(id, dana_klasa);
}
else break;
}
formatex(klasa, charsmax(klasa), "%s \yPoziom: %i", nazwy_klas[dana_klasa], poziom_gracza[id]);
num_to_str(dana_klasa, numer, 9);
menu_additem(menu, klasa, numer);
}

WczytajDane(id, klasa_gracza[id]);

menu_setprop(menu, MPROP_EXITNAME, "Wyjdz");
menu_setprop(menu, MPROP_BACKNAME, "Poprzednia strona");
menu_setprop(menu, MPROP_NEXTNAME, "Nastepna strona");
menu_display(id, menu);

client_cmd(id, "spk QTM_CodMod/select");
}

6. Zmieniamy public WybierzKlase_Handle na:
public WybierzKlase_Handle(id, menu, item)
{
client_cmd(id, "spk QTM_CodMod/select");

if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_CONTINUE;
}

new data[65], name[65], acces, callback
menu_item_getinfo(menu, item, acces, data, 64, name, 64, callback)
item = str_to_num(data);

if(item == klasa_gracza[id] && !nowa_klasa_gracza[id])
return PLUGIN_CONTINUE;

nowa_klasa_gracza[id] = item;

if(klasa_gracza[id])
client_print(id, print_chat, "[COD:MW] Klasa zostanie zmieniona w nastepnej rundzie.");
else
{
UstawNowaKlase(id);
DajBronie(id);
ZastosujAtrybuty(id);
}

return PLUGIN_CONTINUE;
}

7. W publicu SprawdzPoziom, po ZapiszDane(id), dopisujemy:
	if(awansuje_do[klasa_gracza[id]])
{
if(poziom_gracza[id] >= awanse[ZnajdzAwans(klasa_gracza[id], awansuje_do[klasa_gracza[id]])][2])
{
set_hudmessage(212, 255, 85, 0.31, 0.32, 0, 6.0, 5.0);
ShowSyncHudMsg(id, SyncHudObj2,"Osiagajac poziom %i, awansowales do klasy %s!", poziom_gracza[id], nazwy_klas[awansuje_do[klasa_gracza[id]]]);
nowa_klasa_gracza[id] = awansuje_do[klasa_gracza[id]];
UstawNowaKlase(id);
DajBronie(id);
ZastosujAtrybuty(id);
ZapiszDane(id);
}
}

Jeżeli chcesz, aby na nową klasę przechodził poziom, exp, statystyki itd., zastąp w/w funkcję tą:
		if(awansuje_do[klasa_gracza[id]])
{
if(poziom_gracza[id] >= awanse[ZnajdzAwans(klasa_gracza[id], awansuje_do[klasa_gracza[id]])][2])
{
set_hudmessage(212, 255, 85, 0.31, 0.32, 0, 6.0, 5.0);
ShowSyncHudMsg(id, SyncHudObj2,"Osiagajac poziom %i, awansowales do klasy %s!", poziom_gracza[id], nazwy_klas[awansuje_do[klasa_gracza[id]]]);
new temp_int = inteligencja_gracza[id], temp_zdr = zdrowie_gracza[id], temp_kon = kondycja_gracza[id], temp_wyt = wytrzymalosc_gracza[id], temp_exp = doswiadczenie_gracza[id], temp_lvl = poziom_gracza[id];
nowa_klasa_gracza[id] = awansuje_do[klasa_gracza[id]];
UstawNowaKlase(id);
poziom_gracza[id] = temp_lvl;
doswiadczenie_gracza[id] = temp_exp;
wytrzymalosc_gracza[id] = temp_wyt;
zdrowie_gracza[id] = temp_zdr;
kondycja_gracza[id] = temp_kon;
inteligencja_gracza[id] = temp_int;
punkty_gracza[id] = (poziom_gracza[id]-1)*2-inteligencja_gracza[id]-zdrowie_gracza[id]-wytrzymalosc_gracza[id]-kondycja_gracza[id];
DajBronie(id);
ZastosujAtrybuty(id);
ZapiszDane(id);
}
}

8. Zapisujemy i kompilujemy plik. Otwieramy plik include/codmod.inc. Dopisujemy na koniec tego pliku to, a następnie go zapisujemy:
native cod_register_advance(z_klasy, od_levela, const nazwa[], const opis[], bronie, punkty_zdrowia, punkty_kondycji, punkty_inteligencji, punkty_wytrzymalosci);

9. Wszystko jest już gotowe, ale nie mamy zdefiniowanych żadnych awansów. Teraz się tym zajmiemy. Zacznę od omówienia parametrów natywu cod_register_advance.
z_klasy - id klasy, kt&#243;ra ma awansować w tą klasę,
od_levela - wymagany level do awansu,
Reszta parametr&#243;w nie r&#243;żni się od tych z cod_register_class
10. Klasę, w którą będzie się awansować tworzymy praktycznie tak samo, jak zwykłą. Musimy tylko użyć natywu cod_register_advance, zamiast cod_register_class. Użycie natywu wygląda tak:
cod_register_advance(cod_get_classid("Snajper"), 60, nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc);

I teraz w stworzoną przez nas klasę, będzie awansować inna klasa - Snajper, po osiągnięciu 60 poziomu. A to plik .sma przykładowej klasy - Elitarnego Snajpera:
Załączony plik  codawans_elitesnajper.sma   1,4 KB  1790 Ilość pobrań
  codawans_elitesnajper.amxx

Gotowiec:
Załączony plik  awanse.sma   41,62 KB  1677 Ilość pobrań
  awanse.amxx

Dodatki/alternatywne wersje:
- Wersja kompatybilna z frakcjami DarkGL'a - http://amxx.pl/topic...post__p__262120
- Klasy nie awansują, ale odblokowywują się po osiągnięciu danego poziomu na danej klasie - http://amxx.pl/topic...post__p__259522
- Klasy nie awansują, ale odblokowywują się po osiągnięciu danego poziomu na danej klasie (jeżeli mamy wgrane frakcje) - http://amxx.pl/topic...post__p__262954
- Informacje o awansach w menu /klasy - http://amxx.pl/topic...post__p__263164

Mam nadzieję, że coś zrozumieliście i nie będziecie mieli problemów ze zrobieniem tego na swoim CoD'zie Dołączona grafika.
  • +
  • -
  • 75


#264693 [Tutorial] Perk Fala Smierci

Napisane przez MarWit w 30.06.2011 18:59

Tutorial pokazujący jak zrobić perk "Fala Śmierci" ktory po uzyciu zadaje określone obrażenia przez okreslony czas co sec.

Tworzymy nowy perk np.
/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <codmod>

new const perk_name[] = "Fala smierci";
new const perk_desc[] = "Po uzyciu na przeciwnikach, zadajesz im X obrazen co sec przez X sec.";

public plugin_init()
{
register_plugin("codperk_falasmierci", "1.0", "MarWit")
cod_register_perk(perk_name, perk_desc);
}

Pod include <codmod> dodajemy:
#include <engine>
#include <fun>

#define FALA_SMIERCI 7845

#define OBRAZENIA 5 //tu mozesz zmienic wartosc zadawanych obrazen na sec
#define CZAS_OBRAZEN 8 //tu mozesz zmienic czas efektu (w sec.)

new sprite_white


pod
new const perk_desc[] = "Po uzyciu na przeciwnikach, zadajesz im 5 obrazen co sec przez 8 sec.";

dodajemy
new ilosc_fal[33] = 0
new czas_obrazen[33]
new ma_perk[33]

Do plugin_init() dodajemy
register_event("ResetHUD", "ResetHUD", "abe");

Pod
public plugin_init()
{
cod_register_perk(perk_name, perk_desc);
register_event("ResetHUD", "ResetHUD", "abe");
}

dajemy
public cod_perk_enabled(id)
{
ma_perk[id] = true
ilosc_fal[id] = 5 //tu wpisz ilosc fal na runde
}

public cod_perk_disabled(id)
{
ma_perk[id] = false
ilosc_fal[id]=0
}

public cod_perk_used(id)
{
if(ilosc_fal[id] == 0 || !is_user_alive(id) || !ma_perk[id])
return PLUGIN_CONTINUE

ilosc_fal[id]--;

new iOrigin[3];
get_user_origin(id, iOrigin);

message_begin( MSG_BROADCAST, SVC_TEMPENTITY, iOrigin );
write_byte( TE_BEAMCYLINDER );
write_coord( iOrigin[0] );
write_coord( iOrigin[1] );
write_coord( iOrigin[2] );
write_coord( iOrigin[0] );
write_coord( iOrigin[1] + 300 );
write_coord( iOrigin[2] + 300 );
write_short( sprite_white );
write_byte( 0 );
write_byte( 0 );
write_byte( 10 );
write_byte( 120 );
write_byte( 255 );
write_byte( 255 );
write_byte( 0 );
write_byte( 0 );
write_byte( 100 );
write_byte( 4 );
message_end();

new entlist[33];
new numfound = find_sphere_class(id, "player", 300.0, entlist, 32);

for (new i=0; i < numfound; i++)
{
new vic = entlist[i];

if (is_user_alive(vic) && get_user_team(id) != get_user_team(vic)){
czas_obrazen[vic] = CZAS_OBRAZEN
set_task(1.0, "FalaSmierci_task", vic+FALA_SMIERCI, _, _, "b")
}
}

return PLUGIN_CONTINUE;
}

public FalaSmierci_task(id)
{
id -= FALA_SMIERCI
czas_obrazen[id]--
set_user_health(id, (get_user_health(id)-OBRAZENIA))
if(!(is_user_alive(id)) || !(is_user_connected(id)) || czas_obrazen[id] <= 0){
if(task_exists(id+FALA_SMIERCI)) remove_task(id+FALA_SMIERCI)

return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE
}

Na sam koniec sma dodajemy
public ResetHUD(id)
ilosc_fal[id]=5; //tu wpisz ilosc fal na runde


Dla leni dodaje gotowca w załączniku Dołączona grafika

Załączone pliki


  • +
  • -
  • 9


#174735 Multikonta oraz Amnestia

Napisane przez mgr inż. Pavulon w 27.09.2010 10:40

W związku z dużą liczbą wykrytych w ostatnich dniach multikont oraz banów z tym związanych postanowiłem dać wszystkim jeszcze jedną szansę.

"Czyścimy" wszystkie dane o istniejących multikontach oraz usuwamy bany IP (było ich kilka jak niektórzy mieli nawet po 6 kont).
Natomiast konta które zostały zbanowane takie już pozostają.

Użytkownicy którzy posiadają kilka kont a nie zostali jeszcze wykryci proszeni są o korzystanie tylko z jednego konta(jeżeli chcą udawać aniołków) i/lub zgłoszenie prośby o scalenie kont(konta zbanowane nie zostaną scalone).
Rodzeństwo i/lub podobne przypadki w których może dość do wykrycia multikonta(jeden komputer na dwie lub kilka osóB) powinno być na wszelki wypadek zgłoszone(niektórzy byli na tyle inteligentni że już wcześniej to zgłaszali).

Tłumaczenie się że zakładało się n-te konto ponieważ nie pamiętało się hasła nic nie da - od tego jest odzyskiwanie. Jeżeli jednak mimo prób nie uda się odzyskać konta należy założyć nowe konto i niezwłocznie zgłosić się z informacją o zaistniałej sytuacji.

Zakładanie nowego konta z powodu niskiej reputacji czy ostrzeżeń będzie traktowane najmniej pobłażliwie - wszyscy mają możliwość poprawy stanu swojego konta i lenistwo z tego nie zwalnia.

Mam nadzieje że wszyscy to docenią i nie będzie już więcej banów z powodem Multikonto :rolleyes:


p.s.
I nie rozśmieszajcie mnie próbami "przekupstwa" w stylu "Dam ci reputację jak mnie odbanujesz" i żadnymi innymi...
  • +
  • -
  • 17