roki123h Napisano 23 Lutego 2019 Potrzebuje pomocy przy ustawieniu !useclass na przycisk e Przez MAGNET, 23 Lutego 2019 "Cod by linux to nie jest właściwa nazwa tematu. Cod by linux.....co? nic to nie mówi. Poprawiłem nazwę tematu Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
szogun Napisano 23 Lutego 2019 Dodajesz warunek GetClientButtons(client) & IN_USE) Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
roki123h Napisano 23 Lutego 2019 A gdzie to mam dopisac do klasy czy do coda Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
MAGNET Napisano 23 Lutego 2019 bind e "useclass;+use" Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
roki123h Napisano 23 Lutego 2019 @MAGNET mi chodzi o to ze jak ktos wbije na serwer to ma odrazu zbindowane Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
szogun Napisano 23 Lutego 2019 Nie zrobisz na graczu auto bindowania klawisza, możesz jedynie wykryć jego używanie pod daną klasę Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
roki123h Napisano 23 Lutego 2019 (edytowane) a to jak jest zrobiony spadochron ze jest przypisany odrazu pod e ? Edytowane 23 Lutego 2019 przez roki123h Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
szogun Napisano 23 Lutego 2019 (edytowane) Masz podane w drugim poście , musisz edytować klasę i dodać do niej warunek który wykryje użycie danego klawisza Tutaj masz przykład z pluginu na spadochron void OnButtonPress(int client, int button) { if(IsValidClient(client, true)) { int cFlags = GetEntityFlags(client); if(button == IN_USE && g_iParachuteEnt[client] == 0 && IsInAir(client, cFlags)) // Sprawdza czy dany guzik zostal nacisniety { AttachParachute(client); } } } void OnButtonRelease(int client, int button) { if(IsValidClient(client)) { if(button == IN_USE && g_iParachuteEnt[client] != 0) { RemoveParachute(client); } } } Edytowane 23 Lutego 2019 przez szogun Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
roki123h Napisano 23 Lutego 2019 a gdzie musze wpisac useclass AttachParachute(client); tutaj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
szogun Napisano 23 Lutego 2019 To nigdzie, jest to tylko przykład jak zostało to zrobione w pluginie, albo podasz kod klasy albo sam musisz metodą prób i błędów Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
roki123h Napisano 23 Lutego 2019 Spoiler #include <sourcemod> #include <sdkhooks> #include <sdktools> #include <codmod> new const String:nazwa[] = "Wspinacz"; new const String:opis[] = "Posiada line, predkosc wspinania sie po niej (+inteligencja)"; new const String:bronie[] = "#weapon_mac10#weapon_hkp2000#weapon_smokegrenade"; new const inteligencja = 0; new const zdrowie = 5; new const obrazenia = 0; new const wytrzymalosc = 15; new const kondycja = 10; new bool:ma_klase[65], przylepiona_lina_gracza[65]; new sprite_beam, sprite_halo; 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); HookEvent("player_spawn", OdrodzenieGracza); HookEvent("player_death", SmiercGracza); } public OnMapStart() { PrecacheModel("models/props/de_vertigo/construction_safetyribbon_01.mdl"); sprite_beam = PrecacheModel("sprites/laserbeam.vmt"); sprite_halo = PrecacheModel("sprites/glow01.vmt"); PrecacheSound("weapons/items/ammocrate_close.wav"); } public cod_class_enabled(client) { ma_klase[client] = true; } public cod_class_disabled(client) { ma_klase[client] = false; StopLina(client); } public cod_class_skill_used(client) { if(przylepiona_lina_gracza[client] > 0) StopLina(client); else { przylepiona_lina_gracza[client] = CreateEntityByName("hegrenade_projectile"); if(przylepiona_lina_gracza[client] != -1) { if(!cod_get_user_intelligence(client, 1, 0, 0)) PrintCenterText(client, "Aby wzmocnic moc swojej klasy, zwieksz inteligencje!"); new Float:forigin[3]; GetClientEyePosition(client, forigin); new Float:fangles[3]; GetClientEyeAngles(client, fangles); new Float:iorigin[3], Float:iangles[3], Float:ivector[3]; TR_TraceRayFilter(forigin, fangles, MASK_SOLID, RayType_Infinite, TraceRayFilter, przylepiona_lina_gracza[client]); TR_GetEndPosition(iorigin); DispatchSpawn(przylepiona_lina_gracza[client]); ActivateEntity(przylepiona_lina_gracza[client]); SetEntityModel(przylepiona_lina_gracza[client], "models/props/de_vertigo/construction_safetyribbon_01.mdl"); SetEntityMoveType(przylepiona_lina_gracza[client], MOVETYPE_STEP); SetEntityGravity(przylepiona_lina_gracza[client], 0.1); MakeVectorFromPoints(forigin, iorigin, ivector); NormalizeVector(ivector, ivector); ScaleVector(ivector, 1000.0); GetVectorAngles(ivector, iangles); TeleportEntity(przylepiona_lina_gracza[client], forigin, iangles, ivector); SetEntProp(przylepiona_lina_gracza[client], Prop_Send, "m_usSolidFlags", 12); SetEntProp(przylepiona_lina_gracza[client], Prop_Data, "m_nSolidType", 6); SetEntProp(przylepiona_lina_gracza[client], Prop_Send, "m_CollisionGroup", 1); SetEntPropEnt(przylepiona_lina_gracza[client], Prop_Send, "m_hOwnerEntity", client); CreateTimer(0.1, ThinkLiny, EntIndexToEntRef(przylepiona_lina_gracza[client]), TIMER_FLAG_NO_MAPCHANGE); SDKHook(przylepiona_lina_gracza[client], SDKHook_StartTouchPost, DotykLiny); } } } public Action:ThinkLiny(Handle:timer, any:ref) { new ent = EntRefToEntIndex(ref); if (ent == -1 || !IsValidEntity(ent)) return Plugin_Continue; new client = GetEntPropEnt(ent, Prop_Send, "m_hOwnerEntity"); if(!IsValidClient(client)) { AcceptEntityInput(ent, "Kill"); return Plugin_Continue; } new Float:forigin[3]; GetEntPropVector(ent, Prop_Send, "m_vecOrigin", forigin); new Float:iorigin[3]; GetClientEyePosition(client, iorigin); if(GetEntityMoveType(ent) == MOVETYPE_NONE) { new Float:fvelocity[3]; new Float:fdistance = GetVectorDistance(forigin, iorigin); if(fdistance >= 30.0) { new Float:fspeed = 100.0+RoundFloat(cod_get_user_maks_intelligence(client)*0.5); fvelocity[0] = (forigin[0]-iorigin[0])*(2.0*fspeed)/fdistance; fvelocity[1] = (forigin[1]-iorigin[1])*(2.0*fspeed)/fdistance; fvelocity[2] = (forigin[2]-iorigin[2])*(2.0*fspeed)/fdistance; } TeleportEntity(client, NULL_VECTOR, NULL_VECTOR, fvelocity); } TE_SetupBeamPoints(forigin, iorigin, sprite_beam, sprite_halo, 0, 0, 0.1, 6.0, 6.0, 0, 0.0, {0, 255, 0, 128}, 0); TE_SendToAll(); CreateTimer(0.1, ThinkLiny, ent, TIMER_FLAG_NO_MAPCHANGE); return Plugin_Continue; } public Action:DotykLiny(ent, client) { if(!IsValidEntity(ent)) return Plugin_Continue; new attacker = GetEntPropEnt(ent, Prop_Send, "m_hOwnerEntity"); if(!IsValidClient(attacker) || !ma_klase[attacker]) { AcceptEntityInput(ent, "Kill"); return Plugin_Continue; } if(IsValidClient(client) && GetClientTeam(attacker) == GetClientTeam(client)) return Plugin_Continue; if(GetEntityMoveType(ent) != MOVETYPE_NONE) { SetEntityMoveType(ent, MOVETYPE_NONE); EmitSoundToAll("weapons/items/ammocrate_close.wav", ent, SNDCHAN_AUTO, SNDLEVEL_GUNFIRE); } return Plugin_Continue; } public Action:StopLina(client) { if(przylepiona_lina_gracza[client] > 0) { if(IsValidEntity(przylepiona_lina_gracza[client])) AcceptEntityInput(przylepiona_lina_gracza[client], "Kill"); przylepiona_lina_gracza[client] = 0; } return Plugin_Continue; } public bool:TraceRayFilter(ent, contents) { return false; } public Action:OdrodzenieGracza(Handle:event, String:name[], bool:dontBroadcast) { new client = GetClientOfUserId(GetEventInt(event, "userid")); if(!IsValidClient(client) || !ma_klase[client]) return Plugin_Continue; StopLina(client); return Plugin_Continue; } public Action:SmiercGracza(Handle:event, String:name[], bool:dontbroadcast) { new client = GetClientOfUserId(GetEventInt(event, "userid")); if(!IsValidClient(client) || !ma_klase[client]) return Plugin_Continue; StopLina(client); return Plugin_Continue; } Przez Vasto_Lorde, 23 Lutego 2019 Długi kod w tag spoiler proszę ^^ Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
Bioły Napisano 23 Lutego 2019 public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3], float angles[3], int &weapon) { if (buttons & IN_USE) { ClientCommand(client, "komenda"); } return Plugin_Continue; } Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
roki123h Napisano 23 Lutego 2019 @Bioły lecz po użyciu e kick mnie z serwera z powodem wprowadzono zbyt dużo komend Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
MAGNET 1 Napisano 23 Lutego 2019 Silnik codmoda jest zbudowany tak, że po użyciu komendy, którą musisz sobie zbindować (useclass, useitem) wywoływana jest funkcja cod_class_skill_used (lub cod_item_used) w klasie/itemie, którego aktualnie używasz. Jeśli chcesz, aby każdy gracz mógł domyślnie używać mocy klasy pod E będziesz musiał zastosować podany przez @Bioły'ego kod. Niestety, Twój problem wynika najprawdopodobniej przynajmniej z jednej spośród dwóch następujących rzeczy: 1. Polecenie ClientCommand symuluje wysłanie komendy przez gracza. Jeśli nic w tej linijce nie zmieniłeś, będzie on cały czas spamował komendą "komenda". Czy zmieniałeś zawartość na "useclass"? 2. OnPlayerRunCmd wywołuje się przy każdorazowym wysyłaniu pakietów do serwera - czyli cholernie często. Prawdopodobnie przez to kickuje Cię z serwera z błędem. Aby temu zaradzić, trzeba stworzyć blokadę, która nie będzie pozwalała na ponowne użycie komendy przez gracza (powiedzmy na 0.5 sekundy) Swoją drogą, Twój problem i tak jest nie do rozwiązania posługując się samym przyciskiem E, ponieważ poza klasami są jeszcze perki, które również mają swoje moce... może powinieneś sobie odpuścić i znaleźć dobrą metodę na informowanie swoich graczy i potrzebie wprowadzenia bindów? ? Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
Vasto_Lorde 1 Napisano 23 Lutego 2019 Poniżej przedstawiam rozwiązanie jak mniej więcej ma wyglądać usunięcie "spamu" komendą przy przyciskaniu IN_USE public Action OnPreThink(int client) { if (iClientButtons & IN_USE && !(g_iPlayerLastButtons[client] & IN_USE)) { //uzywa sie mocy } g_iPlayerLastButtons[client] = iClientButtons; } Kod zerżnięty z XiaolinModa, ale takie rozwiązanie pojawiało się wiele razy już też w CS 1.6. OnPreThink hookujemy za pomocą SDKhook: SDKHook(client, SDKHook_PreThink, OnPreThink); Do iClientButtons pobieramy aktualne przyciski jakich używa gracz poprzez GetClientButtonsHej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!, w zmiennej globalnej g_iPlayerLastButtons przetrzymujemy ostatnie naciśnięte przyciski. Jak słusznie zauważył @MAGNET nie będziesz mógł tego samego zrobić w przypadku perków, bo metoda której tutaj używamy może wychwytywać tylko i wyłącznie klawisze ruchu (oraz IN_USE domyślnie pod klawisz E), więc co najwyżej mógłbyś zrobić automatyczne użycie perku na przycisk IN_DUCK + IN_JUMP i perk użyłby się przy naciskaniu jednocześnie kucania i skoku Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
Vasto_Lorde Napisano 22 Maja 2019 Wiadomość wygenerowana automatycznie Pomoc udzielona Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach