W tym prostym poradniku opisze w jaki sposób dodamy item znany z amxmodx, nanosuit.
Tak więc na początku tworzymy prosty item, bez żadnych umiejętności, czyli:
#include <sourcemod> #include <codmod> new const String:nazwa[] = "Nanosuit"; new const String:opis[] = "Posiadasz odpornosc na umiejetnosci wszystkich klas oraz itemow"; public Plugin:myinfo = { name = nazwa, author = "Linux`", description = "Cod Item", version = "1.0", url = "http://steamcommunity.com/id/linux2006" }; public OnPluginStart() { cod_register_item(nazwa, opis, 0, 0); }
Następnie musimy otworzyć wszystkie nasze klasy bądż itemy (w zależności od tego na co chcemy mieć odporność) i dodać odpowiedni warunek, nad wykonaniem wybranej funkcji:
if(cod_get_user_item(ofiara) == cod_get_itemid("Nanosuit"))
oczywiście zamiast indexu (ofiara) wpisujemy id naszej ofiary a następnie blokujemy funkcje (return, continue, return Plugin_Continue), wszystko w zależności od tego gdzie dodajemy warunek. Niżej przykładowa klasa Komandos z odpornością na item:
#include <sourcemod> #include <sdkhooks> #include <codmod> new const String:nazwa[] = "Komandos"; new const String:opis[] = "Posiada natychmiastowe zabicie z noza (+ppm)"; new const String:bronie[] = "#weapon_deagle"; new const inteligencja = 0; new const zdrowie = 40; new const obrazenia = 0; new const wytrzymalosc = 0; new const kondycja = 60; new bool:ma_klase[65]; public Plugin:myinfo = { name = nazwa, author = "Linux`", description = "Cod Klasa", version = "1.0", url = "http://steamcommunity.com/id/linux2006" }; public OnPluginStart() { cod_register_class(nazwa, opis, bronie, inteligencja, zdrowie, obrazenia, wytrzymalosc, kondycja); } public OnClientPutInServer(client) { SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage); } public OnClientDisconnect(client) { SDKUnhook(client, SDKHook_OnTakeDamage, OnTakeDamage); } public cod_class_enabled(client) { ma_klase[client] = true; } public cod_class_disabled(client) { ma_klase[client] = false; } public Action:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype) { if(!IsValidClient(victim) || !IsValidClient(attacker)) return Plugin_Continue; if(!ma_klase[attacker] || GetClientTeam(victim) == GetClientTeam(attacker)) return Plugin_Continue; if(cod_get_user_item(victim) == cod_get_itemid("Nanosuit")) return Plugin_Continue; new String:weapon[32]; GetClientWeapon(attacker, weapon, sizeof(weapon)); if(StrEqual(weapon, "weapon_knife") && damagetype & DMG_SLASH && GetClientButtons(attacker) & IN_ATTACK2) cod_inflict_damage(victim, attacker, GetClientHealth(victim)+1); return Plugin_Changed; }
Oczywiście tym sposobem, możemy również dodać odporność na rakiety, miny itp. A w wypadku odporności na klasę funkcja będzie wyglądać tak:
if(cod_get_user_class(ofiara) == cod_get_classid("Nazwa Klasy"))
Silnik wraz z paczką modyfikacji, można nabyć wyłącznie poprzez kontakt ze mną. Więcej o tym w sygnaturze.