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
 

Zdjęcie

[Cmod] Tworzenie podst. klasy + mały opis api

cmod klasy poradnik tworzenie cmod_klasy

  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
6 odpowiedzi w tym temacie

#1 plx211

    Wszechpomocny

  • Użytkownik

Reputacja: 231
Wszechwidzący

  • Postów:397
  • Lokalizacja:Polska
Offline

Napisano 06.04.2015 19:16

*
Popularny

0. Wstęp



Jako że ostatnio dużo osób do mnie pisze obnośnie pomocy z tworzeniem klas, postanowiłem napisać ten oto drobny poradnik ukazujący tą "Czarną Magie".
Z góry przepraszam za wszelkie błędy ortograficzne (przepuszczałem przez "sprawdzaniepisowni" ale się wykrzaczył przez znaki specjalne).
 

1. Piszemy klase



Co będzie nam potrzebne:

  • Kompilator sourcemod (ja używam v1.6.4) z wgranym api cmod'a
  • Wygodny edytor textu (najlepiej z podświetleniem składni - ja używam Geany z składnią C++)
  • pomysł na klase ;)

Moja klasa będzie miała następujące parametry:

  • Nazwa: NikuSan
  • Opis/umiejętność: Przy każdym użyciu skilla dostaje flash'a
  • Bronie: awp, tec-9, flashbang
  • Statystyki INT/CON/STR/DEX: 22/10/33/90

A o to nasz "kod startowy":

#include <sdktools>
#include <sdkhooks>
#include <sourcemod>

public Plugin:myinfo = {
name = "NikuSan",
author = "PLX",
description = "Przy każdym użyciu skilla dostaje flash'a",
version = "1.0",
url = "RedTube.plx"
}

public OnPluginStart(){

}

Pierwszym krokiem który musimy zrobić jest załączenie api, aby tego dokonać pod:

#include <sdktools>
#include <sdkhooks>
#include <sourcemod>

dodajemy:

#include <cmod>

Gdzieś musimy przechowywać informacje o klasie, dlatego pod wyżej wymienionymi musimy dodać następujący kod:

//Tworzymy zmienne przechowujące informacje o klasie oraz je wypełniamy
new const String:nazwaKlasy[] = "NikuSan";
new const String:opisKlasy[] = "Przy każdym użyciu skilla dostaje flash'a";
new const intKlasy = 22;
new const conKlasy = 10;
new const strKlasy = 33;
new const dexKlasy = 90;

//Tworzymy uchwyt dla adt_array (który będzie przechowywał liste broni)
new Handle:bronieKlasy;

Czas nastał na stworznie adt_array który będzie przechowywał listę naszych broni, aby tego dokonać do funkcji OnPluginStart() dodajemy:

//Tworzymy adt_array dla listy broni
bronieKlasy = CreateArray(32);

Następnie wypełniamy adt_array listą broni które nasza klasa ma mieć, w następujący sposób:

//Dodajemy bronie do adt_array
PushArrayString(bronieKlasy, "weapon_awp");
PushArrayString(bronieKlasy, "weapon_tec9");
PushArrayString(bronieKlasy, "weapon_flashbang");

Skoro mamy już zapisane wszystkie informacje które zostaną przekazane do silnika, to przyszedł czas na wysłanie ich, w tym celu  pod powyszym kodem dodajemy:

//Rejestrujemy klase w silniku
Cmod_RegisterClass(nazwaKlasy, opisKlasy, intKlasy, conKlasy, strKlasy, dexKlasy, bronieKlasy);

A teraz ten nieszczęsny skill.
Wpierw tworzymy funkcje odpowiedzialną za aktywacje skilla:

//Tworzymy funkcje, która będzie wywoływana podczas aktywacji skilla przez gracza
public Cmod_OnClientUseSkill(client){

}

Następnie dodajemy do niej:

//Dajemy graczu flash'a
GivePlayerItem(client, "weapon_flashbang");

Zapisujemy następnie kompilujemy klase. Gotowe :D
Dla tych którym się nie udało, niech sobie porównają kod:

#include <sdktools>
#include <sdkhooks>
#include <sourcemod>
#include <cmod>

//Tworzymy zmienne przechowujące informacje o klasie oraz je wypełniamy
new const String:nazwaKlasy[] = "NikuSan";
new const String:opisKlasy[] = "Przy każdym użyciu skilla dostaje flash'a";
new const intKlasy = 22;
new const conKlasy = 10;
new const strKlasy = 33;
new const dexKlasy = 90;

//Tworzymy uchwyt dla adt_array (który będzie przechowywał liste broni)
new Handle:bronieKlasy;

public Plugin:myinfo = {
    name = "NikuSan",
    author = "PLX",
    description = "Przy każdym użyciu skilla dostaj flash'a",
    version = "1.0",
    url = "RedTube.plx"
}

public OnPluginStart(){
    //Tworzymy adt_array dla listy broni
    bronieKlasy = CreateArray(32);
    
    //Dodajemy bronie do adt_array
    PushArrayString(bronieKlasy, "weapon_awp");
    PushArrayString(bronieKlasy, "weapon_tec9");
    PushArrayString(bronieKlasy, "weapon_flashbang");
    
    //Rejestrujemy klase w silniku
    Cmod_RegisterClass(nazwaKlasy, opisKlasy, intKlasy, conKlasy, strKlasy, dexKlasy, bronieKlasy);
}

//Tworzymy funkcje, która będzie wywoływana podczas aktywacji skilla przez gracza
public Cmod_OnClientUseSkill(client){

    //Dajemy graczu flash'a
    GivePlayerItem(client, "weapon_flashbang");
}

 

2. Podst. omówienie  api



2.1 Funkcje



Cmod_RegisterClass
Spoiler

 
Cmod_GetClientBonusWeapons
Spoiler

 
Cmod_GetAllowWeapons
Spoiler

 
Cmod_GetClientWeapons
Spoiler

 

2.2 Forwardy



Cmod_OnClassEnabled
Spoiler

 
Cmod_OnClassDisabled
Spoiler

 
Cmod_OnClientUseSkill
Spoiler

 
Cmod_OnGetNewClassID
Spoiler

 
[h1]3 Ostrzeżenia[/h2]

  • Cześć funkcji z api nie jest do końca zabezpieczona, dlatego upewnij się że podajesz prawidłowe dane
  • Nie dodawaj do listy broni weapon_knife, jeśli go dodasz może wystąpić bug z lewitującym nożem przed graczem
  • Nigdy nie zamykaj adt_array jeśli używa go silnik, może to spowodować crash serva

4. Dodatkowo


4.1 m4a1-s



Aby dodać graczu broń m4a1-s należy także dodać do dozwolonych broni (Cmod_GetClientWeapons) dodać broń m4a4 (tak sm uznaje m4a1-s), sytuacja wygląda podobnie z usp
 

4.2 Vip


public Cmod_OnClassEnabled(client)
{
	if(!GetAdminFlag(GetUserAdmin(client), Admin_Custom1)){
		PrintToChat(client, "\x01\x0B\x01 \x07%s \x06Klasa dostępna tylko dla posiadaczy vip'a!", MOD_TAG);
		return CMOD_DISABLE;
	}
	active[client] = true; // <----- opcjonalne
	return CMOD_CONTINUE;
}

4.3 Ciekawostka



Możesz na bieżąco zmieniać bronie klasy (lecz pamiętaj aby nie zamykać adt_array jeśli silnik z niego korzysta)


Użytkownik plx211 edytował ten post 06.04.2015 19:20

  • +
  • -
  • 11

#2 Z!3L0ny

    Wszechobecny

  • Użytkownik

Reputacja: 171
Profesjonalista

  • Postów:494
  • GG:
  • Imię:Sebastian
  • Lokalizacja:Kielce
Offline

Napisano 06.04.2015 19:30

Przyda się + dla ciebie za robotę


  • +
  • -
  • 0

#3 Wiktor.?

    Profesjonalista

  • Zbanowany

Reputacja: 41
Pomocny

  • Postów:156
  • GG:
  • Imię:Wiktor
  • Lokalizacja:Polski
Offline

Napisano 07.04.2015 20:19

Bardzo przydatne, gdyż się będe uczył je pisać...



#4 Xeane

    Profesjonalista

  • Użytkownik

Reputacja: 47
Pomocny

  • Postów:162
  • Steam:steam
  • Imię:Paweł
  • Lokalizacja:Chorzów
Offline

Napisano 26.05.2015 19:53

zamierzone czy bug że co rundę klasa dostaje znów broń? (ma np famasa, nowa runda wyrzuca famasa i dostaje nowego)


  • +
  • -
  • 0

#5 plx211

    Wszechpomocny

  • Autor tematu
  • Użytkownik

Reputacja: 231
Wszechwidzący

  • Postów:397
  • Lokalizacja:Polska
Offline

Napisano 26.05.2015 20:51

zamierzone i to nie tyczy sie klasy (pisania) a silnika


Użytkownik plx211 edytował ten post 26.05.2015 20:51

  • +
  • -
  • 0

#6 Andrew123

    Nowy

  • Nowy

Reputacja: 0
Nowy

  • Postów:3
  • Lokalizacja:Szc
Offline

Napisano 15.07.2015 23:58

Skąd mogę wziąć kompilator sourcemoda z api cmod?


  • +
  • -
  • 0

#7 bas233

    Profesjonalista

  • Zbanowany

Reputacja: 0
Nowy

  • Postów:191
  • Imię:kamper
  • Lokalizacja:Warszawa
Offline

Napisano 06.08.2015 08:26

Dlaczego jak chcę skompilować klasę to wyskakuje fatal error 

 

Klasa :

 

#include <sdktools>
#include <sdkhooks>
#include <sourcemod>
#include <cmod>
 
//Tworzymy zmienne przechowujące informacje o klasie oraz je wypełniamy
new const String:nazwaKlasy[] = "Madafaka";
new const String:opisKlasy[] = "Przy każdym użyciu skilla dostaje flash'a";
new const intKlasy = 22;
new const conKlasy = 10;
new const strKlasy = 33;
new const dexKlasy = 90;
 
//Tworzymy uchwyt dla adt_array (który będzie przechowywał liste broni)
new Handle:bronieKlasy;
 
public Plugin:myinfo = {
    name = "Madafaka",
    author = "Kamper",
    description = "Przy każdym użyciu skilla dostaj flash'a",
    version = "1.0",
    url = "sadasdsa.pl"
}
 
public OnPluginStart(){
//Tworzymy adt_array dla listy broni
bronieKlasy = CreateArray(32);
 
//Dodajemy bronie do adt_array
PushArrayString(bronieKlasy, "weapon_awp");
PushArrayString(bronieKlasy, "weapon_tec9");
PushArrayString(bronieKlasy, "weapon_flashbang");
 
//Rejestrujemy klase w silniku
Cmod_RegisterClass(nazwaKlasy, opisKlasy, intKlasy, conKlasy, strKlasy, dexKlasy, bronieKlasy);
 
}
 
//Tworzymy funkcje, która będzie wywoływana podczas aktywacji skilla przez gracza
public Cmod_OnClientUseSkill(client){
 
    //Dajemy graczu flash'a
    GivePlayerItem(client, "weapon_flashbang");
}
 
 

Serwer CS Go Cod Mod 501 lvl [Free Knife][FreeSkins][Unikat]

 

banner.jpg?1442845665

 

 IP:178.32.201.165:30033






Również z jednym lub większą ilością słów kluczowych: cmod, klasy, poradnik, tworzenie, cmod_klasy

Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych