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
 

10JQKA - zdjęcie

10JQKA

Rejestracja: 07.04.2015
Aktualnie: Nieaktywny
Poza forum Ostatnio: 29.04.2015 13:38
-----

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

Napisane przez plx211 w 06.04.2015 19:16

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)


  • +
  • -
  • 11