Knife API v2.2
xenos
21.07.2014
Knife API v2.2
by Backstabnoob
tłumaczenie z oryginalnego tematu: https://forums.allie...ad.php?t=240304
Moja pierwsza intencja tego pluginu była dla mojego nadchodzącego RPG.
Jednak nie mogłem znaleźć czegoś podobnego w pluginach, więc postanowiłem włożyć to w wersję wstępną (takią same jak baza danych ORM).
Knife API dodaje w nowych nożach wiatry/bryzy do noży.
Mechanizm odbioru / wyłącznika / upuszczania.
W ten sposób wszystkie noże są dodawane przez standardowy sposób.
W wersji 2.0 dodano wiele nowych możliwości.
Jeśli masz wiele noży, możesz przełączać się między nimi (lub wyświetlić menu jeśli masz cvar włączony) z R (+ przeładowanie) klawiszem.
UWAGA: Pluginy pisane przez Knife API <2.0 nie są kompatybilne z ostatnią wersjią. Musisz zamienić stary plugin. Przepraszam, mam nadzieję, że to się nie powtórzy!
Możliwości:
To jest na prawde bardzo dobre narzędzie dla pluginów, które zależy na nożu takim jak noż RPG jailbreak i serwerów takiego typu.Tworzenie takich noży, przez to staną sie bezproblemowe oprócz gry, zwłaszcza w połączeniu z niestandardową poświatą.
Co ten plugin może robić:
Przypisywanie podstawowych wartości, takich jak modele i dźwięki do nowo utworzonych noży.
Standardowy nóż z użyciem sprites patrz przykład.
Standardowy zasięg noży
Dodatkowe opóźnienie po rozpoczęciu animacji
Wyłapywanie Eventow takich jak atakowanie etc..
Co ten plugin nie może zrobić:
Choć może to nie wiele, ale musisz jeszcze dodać trochę swojej pracy do tego pluginu.
Nie ma dużo rzeczy których nie zrobi, np nie zrobi ci kanapki:)
Wymagania są następujące:
Nie ma żadnych jak na razie !!
Instalacja pluginu(api) jak u w innych pluginach, ściągnij skompiluj kod źródłowy i łącz go z innymi pluginami
http://amxx.pl/topic...-pluginow-amxx/
Domyslny nóż z CS'a został usunięty i zastąpiony przez ręce ( widać te na jailbreak).
Jeśli chcesz to zmienić zakomentuj #DEFAULT_HANDS w kodzie źródłowym w linii 59.
Jeśli to zrobisz, to też nie potrzeba plików resources.
Do skonfigurowania wartości domyslnego noża/rąk edytuj __addDefaultKnife() jest to w kodzie źródłowym w lini 203
- knifeapi_dropondeath (domyślnie:1) - czy noże wypadają po śmierci gracza ? niestety noże nie wypadają po zgonie gracza, musisz również użyć knifeapi_lossondeath!
- knifeapi_lossondeath (domyślnie:1) - Czt gracz straci wszystkie noże po śmierci ( z wyjątkiem noża podstawowego) ?
- knifeapi_switchmenu (domyślnie:1) - po naciśnięciu klawisza R (RELOAD), chcesz, aby wyświetlić menu z nożami.
- knifeapi_roundremoval (domyślnie:1)- noże które wypadły powinny być usunięte na koniec rundy ?
#include <amxmodx> #include <hamsandwich> #include <fakemeta> #include <engine> #include <cstrike> #include <fun> #include <knifeapi> #include <xs>
Przykładowy plugin:
weapon_superknife.txt:
Załączone pliki
Użytkownik xenos edytował ten post 21.07.2014 16:09
xenos
21.07.2014
Poleciales z translatora....
Nie zamierzam robić offtopu, więc zanim oskarzysz porównaj.
To jest przykład początku sprawdz resztę jak chcesz.
Lecz nie mówię że nie może być błedów gramatycznych czy językowych.
Gdyż tłumaczenie polegało na skopiowaniu oryginalnego tekstu i działaniu na "żywo na nim".
Więc nawet teraz wyłapałem kilka gramatycznych niesmaków do których nie jedna polonistka by przyłożyła mi swojego AK'cza , bo wyszły chyba 2 zdania typu "kali jeść kali pić".
Jak dziś dorwę Misq'a to podeśle mu poprawiony tekst gdyż wyżej powstały właśnie takie zdania kali jeść kali pić .
Użytkownik xenos edytował ten post 21.07.2014 16:22
MAGNET
21.07.2014
To jest na prawde bardzo dobre narzędzie dla pluginów, które zależy na nożu takim jak noż RPG jailbreak i serwerów takiego typu.Tworzenie takich noży, przez to staną sie bezproblemowe oprócz gry, zwłaszcza w połączeniu z niestandardową poświatą.
Może i nie zerżnięte w całościowo z translatora, ale nad tłumaczeniem mogłeś się bardziej postarać
@@ EDIT
Masz tutaj tłumaczenie. Jeśli chesz, popodmieniaj:
Możliwości topPoczątkowo plugin miał trafić do mojego nadchodzącego RolePlaying mod'a, jednak nie mogłem znaleźć żadnego pluginu podobnego do tego, więc zdecydowałem się na przedpremierowe wydanie go (tak, jak Database ORM).
Knife API makes adding new knives a breeze due to the knife pickup/switching/dropping mechanism it provides (tego nie rozumiem ). Tym sposobem, wszystkie noże są dodane standardową metodą. Wersja 2.0 dodaje wiele nowych możliwości i funckji do pluginu
Jeśli masz wiele noży, możesz przełączać się między nimi (lub, w zależności od cvaru, używająć menu) klawiszem R (+reload).
UWAGA: Pluginy napisane na podstawie Knife API <2.0 NIE SĄ KOMPATYBILNE z nową wersją. Będziesz musiał przerobić Twój stary plugin. Przepraszam, mam nadzieję, że to się więcej nie powtórzy!
Wymagania Jest to doskonałe narzędzie dla pluginów, które bazują na nożach (jak serwery z modami nożowymi, np. RolePlaying(), jailbreak etc.). Tworzenie noży przez ten plugin sprawi wrażenie zintegrowania pluginu z modem(?), szczególnie, kiedy będzie oparty na podstawowych sprite'ach (?).
Co plugin może robić:
- Przydziela podstawowe dodatko (jak modele i dźwięki) do nowo utworzonego noża
- Standardowe sprite'y noża, zobacz przykłady
- Standardowy zasięg noża
- Dodatkowy odstęp czasowy pomiędzy odtworzeniem animacji
- Łapie eventy, takie jak atakowanie/wyciąganie broni z większą płynnością
- Etc.
Co plugin nie może robić:
- Mimo, iż plugin robi bardzo dużo, musisz włożyć trochę pracy w stworzenie czegoś
- Niewiele rzeczy może nie zrobić. Nie może zmienić Cię w kanapkę
Instalacja, konfiguracja topWymagane są:
- OBECNIE NIC! YAAY!
Aby zainstalować:
Zainstaluj jak każdy inny plugin. Pobierz sma, skompiluj i pozwól innym pluginom korzystać z jego możliwości
Aby skonfigurować:
Standardowo, nóż CS został usunięty i zastąpiony rękoma (jak na JailBreake'u). Jeśli chcesz to zmienić, zakomentuj #define DEFAULT_HANDS w sma w linijce nr. 59. Jeśli to zrobisz, nie będziesz musiał pobierać żadnych plików.
Żeby skonfigurować standardowe wartości noża/rąk , edytuj fukcję __addDefaultKnife() w sma w linijce 203.
Użyj następujących cvarów, aby zmienić podstawowe fukcje pluginu:
- knifeapi_dropondeath (standardowo:1) - czy noże, które można wyrzucić, będą wyrzucane przy śmierci gracza? Nie usuwa to go graczom. Musisz także użyć knifeapi_lossondeath!
- knifeapi_lossondeath (standardowo:1) - czy po śmierci gracze gubią wszystkie noże (wszystkie noże z wyjątkiem podstawowego)?
- knifeapi_switchmenu (standardowo:1) - czy po kliknieciu R ma pokazać się menu z wyborem noży, czy mają się zmieniać po kolei?
- knifeapi_roundremoval (standardowo:1) - czy wyrzucone noże mają zostać usunięte na końcu rundy?
API (Natywy i forwardy) top
Natywy i forwardy będą wyjaśnione w pliku .inc. Nie powie Ci to nic, jeśli chodzi o pisanie pluginów, w tym celu powinieneś obejrzeć przykłady.
// Nie wiem dokładnie co to robi. #pragma library "knifeapi" /************************************************** ************ API ENUMS AND STRUCTURES ************ *************************************************/ enum KnifeProperties { KN_STR_WeaponName, // nazwa broni, pokazana w menu KN_STR_VModel, // ścieżka do modelu v_ (models/....) KN_STR_PModel, // ścieżka do modelu p_ (models/....) KN_STR_WModel, // ścieżka do modelu w_ (models/....) KN_STR_DeploySound, // ścieżka do dźwięku wyciągania noża KN_STR_SlashSound, // ścieżka do dźwięku cięcia nożem KN_STR_StabSound, // ścieżka do dźwięku ataku nożem KN_STR_WhiffSound, // ścieżka do dźwięku ataku nożem (pudło) KN_STR_WallSound, // ścieżka do dźwięku po ścianie KN_STR_SpriteName, // jeśli używasz standardowego, zmień to na nazwę pliku .txt (np. weapon_custom) - NIE ZMIEINAJ TEGO, JEŚLI NIE UŻYWASZ STANDARDOWEGO SPRITE'A!!! KN_CLL_Droppable, // czy da się go wyrzucić? KN_CLL_PrimaryDamage, // mnożnik DMG z LPM (1.0 - standardowe obrażenia, 2.0 - podwojne obrazenia etc.) KN_CLL_SecondaryDamage, // mnożnik DMG z PPM (1.0 - standardowe obrażenia, 2.0 - podwojne obrazenia etc.) KN_CLL_PrimaryNextAttack, // czas pomiędzy atakami z LPM KN_CLL_SecondaryNextAttack, // czas pomiędzy atakami z PPM KN_CLL_PrimaryRange, // zasięg ataku LPM KN_CLL_SecondaryRange, // zasięg ataku PPM KN_CLL_PrimaryDamageDelay, // odstep pomiędzy naciśnięciem klawisza, a atakiem aktualnego noża z LPM KN_CLL_SecondaryDamageDelay,// odstep pomiędzy naciśnięciem klawisza, a atakiem aktualnego noża z PPM KN_CLL_PrimaryDmgBits, // tak jak DMG_BULLET | DMG_ALWAYSGIB (ustawiają wybuch gracza), DMG_BULLET | DMG_NEVERGIB standardowo dla LPM KN_CLL_SecondaryDmgBits, // tak jak DMG_BULLET | DMG_ALWAYSGIB (ustawiają wybuch gracza), DMG_BULLET | DMG_NEVERGIB standardowo dla PPM KN_CLL_TeamLock, // jeśli 0, przeciwna drużyna nie będzie mogła podnieść noża KN_CLL_NextAttackDependency,// jeśli true, LPM również zmienia następny atak PPM na tą samą wartośc (i na odwrót); standardowo true KN_CLL_IgnoreFriendlyFire // ignorowac friendly fire? }; enum _:ForwardReturns { KnifeAction_Block = 5, KnifeAction_DoNothing }; /**************************************** ************ PLUGIN NATIVES ************ ***************************************/ /* Knife_Register(): rejestruje noz. * @params: zobacz KnifeProperties, są takie same * @info: możesz uzyć dodatkowych ustawieć z Knife_SetProperty * @return: (Int) wskaźnik noża */ native Knife_Register( const WeaponName[] = "New Knife", const VModel[], const PModel[] = "", const WModel[] = "", const DeploySound[] = "weapons/knife_deploy1.wav", const SlashSound[] = "weapons/knife_hit1.wav", const StabSound[] = "weapons/knife_stab.wav", const WhiffSound[] = "weapons/knife_slash1.wav", const WallSound[] = "weapons/knife_hitwall1.wav", Float:PrimaryDamage = 1.0, Float:SecondaryDamage = 1.0 ); /* Knife_GetTotal(): zwraca ilość zarejestrowanych noży. * @info: prosta pętla: for(new i=1; i<=Knife_GetTotal(); i++) * @return: (Int) wartośc noży zarejestrowanych */ native Knife_GetTotal(); /* Knife_GetProperty(): zwraca właściciela noża z enuma KnifeProperties. * @param (Int) Knife: index noża * @param (Int) Value: wartość z enuma KnifeProperties * @params (any...): Jeśli używasz wartości KN_STR_X, następne 2 parametry są tablicą i jej rozmiarem, w innym razie jest to tylko tablica cell, do ktorej dane są zapisywane przez referencje * @return: (Int) 1 - poprawnie, 0 - error */ native Knife_GetProperty(Knife, KnifeProperties:Value, any:...); /* Knife_SetProperty(): Ustawia właściciela noża z enuma KnifeProperties. * @param (Int) Knife: index noża * @param (Int) Value: wartość z enuma KnifeProperties * @params (any...): String/cell z wartością * @return: (Int) 1 - poprawnie, 0, error */ native Knife_SetProperty(Knife, KnifeProperties:Value, any:...); /* Knife_PlayerGive(): Daje nóż graczowi. * @param (Int) Player: Index gracza * @param (Int) Knife: index noża * @param (bool) Set: jeśli true, gracz dostanie nóż do ręki * @return: (Int) 1 - poprawnie, 0 - error */ native Knife_PlayerGive(Player, Knife, bool:Set = true); /* Knife_PlayerGetCurrent(): zwraca aktualny nóż trzymany przez gracza. * @param (Int) Player: index gracza * @return: (Int) 0 - standardowy nóż, X - ID noża, -1 - error/niepowodzenie */ native Knife_PlayerGetCurrent(Player); /* Knife_PlayerSetCurrent(): Wyciąga nóż graczowi. Musi on go posiadać * @param (Int) Player: Index graczam któremu ma się wyciągnąć nóż * @param (Int) Knife: index noża * @return: (Int) 1 - poprawnie, 0 - error */ native Knife_PlayerSetCurrent(Player, Knife); /* Knife_PlayerHas(): sprawdza, czy gracz ma nóż * @param (Int) Player: Index gracza * @param (Int) Knife: index noża * @return: (Int) 1 - posiada, 0 - niepowodzenie/error/nie posiada */ native Knife_PlayerHas(Player, Knife); /* Knife_PlayerSetLock(): Nie pozwala graczowi na zmianę noża * @param (Int) Player: Index gracza * @param (Bool) Locked: Status blokady - true: zablokowany, false: odblokowany * @return: nic */ native Knife_PlayerSetLock(Player, bool:Locked); /* Knife_PlayerGetLock(): Sprawdza, czy gracz ma zablokowaną zmianę noża * @param (Int) Player: Index gracza * @return: (Bool) true: zablokowany, false: odblokowany */ native bool:Knife_PlayerGetLock(Player); /* Knife_PlayerRemoveAll(): zabiera graczowy wszystkie noże, z wyjątkiem standardowego. * @param (Int) Player: Index gracza * @return: nothing */ native Knife_PlayerRemoveAll(Player); /********************************** ************ FORWARDS ************ *********************************/ /* KnifeAction_ProcessAttack_Pre(): Wywoływany, kiedy atak się wywoła. Pre hook: Wywoływany przed odstępem animacji, jeśli takowa istnieje. Możesz zablokować tę akcję przez KnifeAction_Block. * @param (Int) Player: Index gracza (atakujacy) * @param (Int) Knife: index noża * @param (bool) PrimaryAttack: true: tak, false: nie */ forward KnifeAction_ProcessAttack_Pre(Player, Knife, bool:PrimaryAttack); /* KnifeAction_ProcessAttack_Post(): Wywoływany, gdy gracz zaatakować drugiego. Post hook: Wywoływany po odstępie animacji, jeśli takowa istnieje. Nie możesz zablokować tego forwardu. Zamiast tego zablokuj KnifeAction_DealDamage. * @param (Int) Player: Index gracza (atakujacy) * @param (Int) Victim: Gracz otrzymujacy obrazenia. Jeśli nie było ofiary (ściana/powietrze), index ma wartość 0. * @param (Int) Knife: index noża * @param (bool) PrimaryAttack: true: tak, false: nie * @param (Vector) EndPoint: Końcowy punkt zasięgu noża. Jest to origin, gdzie obrażenie się dokonało. Zalecam używania standardowych sprite'ów przy używaniu tego. * @param (Vector) AimVector: kierunek patrzenia gracza */ forward KnifeAction_ProcessAttack_Post(Player, Victim, Knife, bool:PrimaryAttack, Float:EndPoint[3], Float:AimVector[3]); /* KnifeAction_DealDamage(): Wywoływany tuż przez zadaniem obrażeń Pre hook: Możesz zablokować tę akcję przez KnifeAction_Block. * @param (Int) Attacker: index gracza (ataklujacy) * @param (Int) Victim: gracz otrzymujacy obrazenia * @param (Int) Knife: index noża * @param (Float) Damage: obrażenia zadane z uwzględnieniem: hitboxów/ciosu w plecy/standardowy mnożnik obrażeń * @param (bool) PrimaryAttack: true: tak, false: nie * @param (Vector) EndPoint: Końcowy punkt ataku noża - origin, gdzie obrażenia są wysyłane Zalecam używanie standardowych sprite'ów podczas używania tego * @param (Vector) AimVector: Kierunek patrzenia gracza * @param (Int) Hitzone: Hitzone, np. HIT_HEAD. */ forward KnifeAction_DealDamage(Attacker, Victim, Knife, Float:Damage, bool:PrimaryAttack, DamageBits, bool:Backstab, Float:EndPoint[3], Float:AimVector[3], Hitzone ); /* KnifeAction_Deploy(): Wywoływane, kiedy gracz wyciągnie nóż. Post hook: nie możesz zablokować tego forwardu. * @param (Int) Attacker: index gracza * @param (Int) Knife: index noża */ forward KnifeAction_Deploy(Player, Knife); /* KnifeAction_SoundPlay(): Wywoływany, kiedy dźwięki noża mają zostać odtworzone. Pre hook: Możesz zablokować ta akcję przez KnifeAction_Block. * @param (Int) Player: Index gracza * @param (Int) Knife: index noża * @param (String) Sound: odtwarzany dźwięk */ forward KnifeAction_SoundPlay(Player, Knife, const Sound[]);
MAGNET
21.07.2014
Przykładowy kod:
#include <amxmodx> #include <knifeapi> #include <cstrike> new g_Knife new const VMODEL[] = "models/v_knife.mdl" new const PMODEL[] = "models/p_knife.mdl" const KNIFE_PRICE = 300 public plugin_precache() { precache_model(VMODEL) precache_model(PMODEL) // precachujemy standardowe pliki sprite'a - .txt i .spr precache_generic("sprites/weapon_superknife.txt") precache_generic("sprites/superknife.spr") // ZAWSZE precachuj pliki. Jesli tego nie zrobisz, serwer sie zcrashuje. Serwer nie zrobi tego za Ciebie } public plugin_init() { register_plugin("Knife API example", "1.0", "idiotstrike") g_Knife = Knife_Register( .WeaponName = "Default Knife", .VModel = VMODEL, .PModel = PMODEL ) // dodatkowe właściwości (aby zobaczyć pełną listę, odwiedź plik knifeapi.inc): // sprawiamy, że nóż będzie można wyrzucić Knife_SetProperty(g_Knife, KN_CLL_Droppable, true) // jeśli chcemy użyć standardowego sprite'a, ustawiamy to na nazwę pliku .txt bez dodatków. // jeśli nie chcesz używać standardowego sprite'a. nie zmieniaj wartości parametru KN_STR_SpriteName! Knife_SetProperty(g_Knife, KN_STR_SpriteName, "weapon_superknife") // możemy również zmienić zasięg broni z LPM na 60.0, aby stała się bardziej nierealistyczna //Knife_SetProperty(g_Knife, KN_CLL_PrimaryRange, 60.0) register_clcmd("say /buyknife", "CmdBuyKnife") } public CmdBuyKnife(id) { if(!is_user_alive(id)) { client_print(id, print_chat, "Musisz byc zywy.") } else if(Knife_PlayerHas(id, g_Knife)) { client_print(id, print_chat, "Masz juz ten noz. Zmien bron na noz i nacisnij R, aby sie przekonac.") } else { new Money = cs_get_user_money(id) if(Money < KNIFE_PRICE) { client_print(id, print_center, "Masz za malo pieniedzy.") } else { Knife_PlayerGive(id, g_Knife) cs_set_user_money(id, Money - KNIFE_PRICE) } } return PLUGIN_HANDLED }
MAGNET
21.07.2014
Plugin po prostu umozliwia stworzenie nowych nozy. Wszystko regulowane forwardami I cvarami. Przykladowy plugin juz podany.