←  Poradniki, Łatki oraz Pluginy

AMXX.pl: Support AMX Mod X i SourceMod

»

CoD Nowy
Klasa "Kim Ir Sen"

  • +
  • -
Hleb - zdjęcie Hleb 06.07.2012

Dołączona grafika

Nazwa Klasy : Kim Ir Sen (Premium)
Opis klasy : Osoba z teamu, do którego należy klasa, oraz sama klasa otrzymuje dodatkowe 20 doświadczenia za zabójstwo
bronie klasy : AK47, FIVESEVEN oraz wszystkie granaty
zdrowie: 37
kondycja: 25
inteligencja: 15
wytrzymalosc: 20
Klasa Premium na flagę ADMIN_LEVEL_H

UWAGA!!
żeby osobie z teamu naliczało dodatkowego expa, klasa musi być żywa!!

Dołączona grafika

Załączony plik  codclass_kimirsen.sma   2,18 KB   77 Ilość pobrań
Odpowiedz

  • +
  • -
TheRock - zdjęcie TheRock 07.07.2012

Fajna klasa +
tylko jak gra dużo osób na serwerze taką klasa to chyba szybko się expi
Odpowiedz

creepMP3 - zdjęcie creepMP3 07.07.2012

Jest już taka klasa, która dostaje więcej XP za zabójstwo.
Odpowiedz

  • +
  • -
d0naciak - zdjęcie d0naciak 08.07.2012

creepMP3, nie zrorzumiałeś chyba. Tu chodzi o to, jeżeli w danej druzynie jest gracz z takową klasą, to całą drużyna dostaje dodatkowo +20xp za zabojstwo
Odpowiedz

  • +
  • -
Fili:P - zdjęcie Fili:P 08.07.2012

A nie prościej tak:
/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <codmod>
#include <hamsandwich>

new bool: ma_klase[33];
new kimirsen;

new const nazwa[] = "Kim Ir Sen (Premium)";
new const opis[] = "Osoba z teamu klasy oraz sama klasa otrzymuje dodatkowe 20 exp'a za zabojstwo";
new const bronie = 1<<CSW_AK47 | 1<<CSW_SMOKEGRENADE | 1<<CSW_HEGRENADE | 1<<CSW_FLASHBANG | 1<<CSW_FIVESEVEN;
new const zdrowie = 37;
new const kondycja = 25;
new const inteligencja = 15;
new const wytrzymalosc = 20;

public plugin_init()
{
register_plugin(nazwa, "1.0", "Hleb");
RegisterHam(Ham_Killed, "player", "Zabojstwo_Klasy", 1);
cod_register_class(nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc);
}
public cod_class_enabled(id)
{
if(!(get_user_flags(id) & ADMIN_LEVEL_H))
{
client_print(id, print_chat, "[Kim Ir Sen] Nie masz uprawnien, aby uzywac tej klasy.")
return COD_STOP;
}
kimirsen = id;
ma_klase[id] = true;
return COD_CONTINUE;
}

public cod_perk_disabled(id)
{
kimirsen = 0;
ma_klase[id] = true
}
public Zabojstwo_Klasy(this, attacker)
{
if(!is_user_connected(attacker))
return HAM_IGNORED

if(!is_user_alive(attacker))
return HAM_IGNORED

if(!kimirsen)
return HAM_IGNORED

if(get_user_team(kimirsen) != get_user_team(attacker))
return HAM_IGNORED;

if(get_user_team(this) != get_user_team(attacker))
cod_set_user_xp(attacker, cod_get_user_xp(attacker)+20)

return HAM_IGNORED
}

?
I tw. to po co był tu moduł cstrike, oraz czy sprawdzałeś, czy przy np. 2 kimirsenów nie będzie bugów ?
Odpowiedz

  • +
  • -
d0naciak - zdjęcie d0naciak 08.07.2012

1. Nie bedzie dzialalo przy dwóch graczach na jednej klasie
2. Dlaczego przy cod_class_disabled ma_klase jest na true ??
3. Po co cstrike, a nawet hamsandwich ?
4. Po co tyle warunków ?
5. Oto mój sposób :
/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <codmod>

new bool: ma_klase[33];

new const nazwa[] = "Kim Ir Sen (Premium)";
new const opis[] = "Osoba z teamu klasy oraz sama klasa otrzymuje dodatkowe 20 exp'a za zabojstwo";
new const bronie = 1<<CSW_AK47 | 1<<CSW_SMOKEGRENADE | 1<<CSW_HEGRENADE | 1<<CSW_FLASHBANG | 1<<CSW_FIVESEVEN;
new const zdrowie = 37;
new const kondycja = 25;
new const inteligencja = 15;
new const wytrzymalosc = 20;

public plugin_init()
{
register_plugin(nazwa, "1.1", "Hleb & d0n tHe Pr0oo");
register_event("DeathMsg", "Zabojstwo", "a")
cod_register_class(nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc);
}
public cod_class_enabled(id)
{
if(!(get_user_flags(id) & ADMIN_LEVEL_H))
{
client_print(id, print_chat, "[Kim Ir Sen] Nie masz uprawnien, aby uzywac tej klasy.")
return COD_STOP;
}
ma_klase[id] = true;
return COD_CONTINUE;
}

public cod_perk_disabled(id)
{
ma_klase[id] = false;
}
public Zabojstwo()
{
new attacker = read_data(1);
new this = read_data(2);

if(!is_user_alive(attacker))
return PLUGIN_CONTINUE;

if(!ma_klase[attacker])
return PLUGIN_CONTINUE;

if(get_user_team(this) != get_user_team(attacker))
{
for(new i = 1; i <= get_maxplayers(); i++)
{
if(get_user_team(i) == get_user_team(attacker) && is_user_alive(i))
{
cod_set_user_xp(i, cod_get_user_xp(i)+20);
}
}
}

return PLUGIN_CONTINUE;
}


Użytkownik d0n tHe Pr0oo edytował ten post 08.07.2012 20:04
Odpowiedz

  • +
  • -
Hleb - zdjęcie Hleb 08.07.2012

Fili:P @ dOn tHe Pr0oo

Albo wy też nie zrozumieliście idei klasy, albo ja wam źle wytłumaczyłem

Chodzi o to by oprócz klasy, również zabójca, który nie jest klasą "Kim Ir Sen", a ma w teamie gracza z takową klasą, dostaje dodatkowego expa. A tak po kolei

@Fili:P

W tym przypadku zabójca nie będący klasą dostanie expa, ale zabójca będący klasą już nie, z tym bugiem to dobrze trafiłes, a pytanie o cstrike, bo wcześniej dałem "cs_get_user_team", aż w końcu zdecydowałem się na "get_user_team", i tak po prostu zapomniałem usunąć xD

@dOn tHe Pr0oo

Zabójca niebędący klasą nie dostanie expa, ale zabójca będący klasą sprawi że cały team żyjący dostanie expa

1. Tu muszę ci przyznać rację
2. Fakt, czysta pomyłka xD (ach, sesja egzaminacyjna dała mi się we znaki)
3. Cstrike: czytaj treść do Fili:P, a HamSandwich to do

RegisterHam(Ham_Killed, "player", "Zabojstwo_Klasy", 1);
, uznałem ze to ma większe możliwości, ponieważ id ofiary i zabójcy jest w argumencie funkcji, dzięki czemu oszczędzimy pamięć, nie deklarując nowych zmiennych (nawet jeśli to lokalne)
4. Wiem że to trochę dziwacznie wygląda, ale muszę dopilnować, by np: przeciwnicy nie dostali expa, albo "nasi" nie dostawali dwa razy.

Wniosek: Muszę przyznać się do błędu, ja źle wytłumaczyłem ideę klasy, a kod też spartoliłem (sesja egzaminacyjna :( )

moja poprawka prezentuje się tak

/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <codmod>
#include <hamsandwich>

new bool: ma_klase[33];
new kimirsen;

new const nazwa[] = "Kim Ir Sen (Premium)";
new const opis[] = "Zabojca majacy w teamie klase oraz sama klasa otrzymuje dodatkowe 20 exp'a za zabojstwo";
new const bronie = 1<<CSW_AK47 | 1<<CSW_SMOKEGRENADE | 1<<CSW_HEGRENADE | 1<<CSW_FLASHBANG | 1<<CSW_FIVESEVEN;
new const zdrowie = 37;
new const kondycja = 25;
new const inteligencja = 15;
new const wytrzymalosc = 20;

public plugin_init()
{
register_plugin(nazwa, "1.1", "Hleb & d0n tHe Pr0oo");
RegisterHam(Ham_Killed, "player", "Jest_Klasa", 1);
RegisterHam(Ham_Killed, "player", "Nie_Jest_Klasa", 1);
cod_register_class(nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc);
}
public cod_class_enabled(id)
{
if(!(get_user_flags(id) & ADMIN_LEVEL_H))
{
client_print(id, print_chat, "[Kim Ir Sen] Nie masz uprawnien, aby uzywac tej klasy.")
return COD_STOP;
}
ma_klase[id] = true;
return COD_CONTINUE;
}

public cod_class_disabled(id)
{
kimirsen = 0;
ma_klase[id] = false
}
public Jest_Klasa(this, attacker)
{
if(!is_user_connected(attacker))
return HAM_IGNORED

if(!is_user_alive(attacker))
return HAM_IGNORED

if(!ma_klase[attacker])
return HAM_IGNORED

if(get_user_team(this) != get_user_team(attacker))
cod_set_user_xp(attacker, cod_get_user_xp(attacker)+20)

return HAM_IGNORED
}
public Nie_Jest_Klasa(this, attacker)
{
new Players[32], playerCount, id;
get_players(Players, playerCount, "aeh", (get_user_team(attacker)==1)?"TERRORIST":"CT");
for(new i=0; i<=playerCount; i++)
{
id= Players[i];
if(ma_klase[id])
{
kimirsen = id;
break;
}
}
if(!kimirsen)
return HAM_IGNORED;

if(!is_user_connected(attacker))
return HAM_IGNORED

if(!is_user_alive(attacker) && !is_user_alive(kimirsen))
return HAM_IGNORED

if(get_user_team(this) != get_user_team(attacker) && attacker != kimirsen)
{
cod_set_user_xp(attacker, cod_get_user_xp(attacker)+20)
kimirsen = 0;
}
return HAM_IGNORED
}



Dla leniwych
Załączony plik  codclass_kimirsen.sma   2,28 KB   43 Ilość pobrań


Obaj łapcie po + za wyłapanie błędów, ja zaś przepraszam za błędny kod, na przyszłość to trochę po sesji odpocznę
Użytkownik Hleb edytował ten post 08.07.2012 21:56
Odpowiedz

  • +
  • -
d0naciak - zdjęcie d0naciak 09.07.2012

No przyznam się że źle zrozumiałem ;D
Odpowiedz