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.
|
[ROZWIĄZANE] Ostatni żywy człowiek/grupa
#1
Napisano 29.08.2012 01:36
Proszę o kod i wytłumaczenie (jak się będzie Ci chciało się pisać wytłumaczenie )
DarkGL to mój autorytet.
skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować
#2
Napisano 29.08.2012 15:31
kod w evencie death
if(g_bZabawa)
{
new iPlayers[ 32 ], iNum, InneGangi;
get_players( iPlayers, iNum );
new iPlayer;
{
for( new i = 0; i < iNum; i++ )
{
iPlayer = iPlayers[ i ];
if( iPlayer == iKiller )
continue;
if( ((g_iGrupa[ iKiller ] != g_iGrupa[ iPlayer ]) || (g_iGrupa[iKiller] == g_iGrupa[iPlayer] && g_iGrupa[iKiller] == -1)) && is_user_alive(iPlayer))
{
InneGrupy++
}
}
if(InneGrupy == 0)
Koniec(iKiller)
}
}
i public Koniec()
public Koniec(killer)
{
if(g_iGrupa[ killer ] == -1)
{
new szName[32]
get_user_name(killer, szName, 31)
client_print(0, print_chat, "Jeden wygral")
}
else
{
new aData[ GrupaInfo ]
ArrayGetArray( g_aGrupy, g_iGrupa[ killer ], aData );
client_print(0, print_chat, "Wygrala jakas druzyna")
// nagrody
}
g_bZabawa = false
}
I moje pytanie jest następujące, czemu to nie działa?
I czy w ogóle można tak zrobić?
DarkGL to mój autorytet.
skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować
#3
Napisano 29.08.2012 17:24
Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q
Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka
GG:6022845 (nie pomagam za free osobom ponizej rangi MoD)
#4
Napisano 29.08.2012 17:38
W moim kodzie założyłem że jeżeli grupa gracza nie jest grupą zabójcy to żyją jeszcze inne grupy, a jeżeli takowych nie znajdzie to wywołuje się dana funkcja. Lecz mój kod jest pisany "na szybko".
Edit: to id zabójcy nie jest mi bardzo potrzebne
Użytkownik K!113r edytował ten post 29.08.2012 17:39
DarkGL to mój autorytet.
skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować
#5
Napisano 29.08.2012 18:00
if(g_bZabawa){
new iPlayers[ 32 ], iNum;
get_players( iPlayers, iNum );
new iPlayer,licz_graczy,licz_grupe;
for( new i = 0; i < iNum; i++ )
{
iPlayer = iPlayers[i];
if(is_user_alive(iPlayer))
continue;
if(iPlayer == iKiller)
continue;
licz_graczy++
if(licz_graczy==1)
Koniec(iKiller,1)
if(g_iGrupa[iKiller] == g_iGrupa[iPlayer])
licz_grupe++
}
if(licz_graczy==licz_grupe)
Koniec(iKiller,2)
}
public Koniec(killer,mode)
{
if(mode==1)
{
new szName[32]
get_user_name(killer, szName, 31)
client_print(0, print_chat, "Jeden wygral")
}
else
{
new aData[ GrupaInfo ]
ArrayGetArray( g_aGrupy, g_iGrupa[ killer ], aData );
client_print(0, print_chat, "Wygrala jakas druzyna")
// nagrody
}
g_bZabawa = false
}
nie testowane , nie wiem czy dziala , zamulony jestem troche
@ sry ale tabulacja cos sie usuwa jak wklejam kod
Użytkownik Stachuu :D ?? edytował ten post 29.08.2012 18:01
#6
Napisano 29.08.2012 18:43
DarkGL to mój autorytet.
skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować
#7
Napisano 29.08.2012 20:53
public DeathMsg(){
new KID = read_data(1);
new VID = read_data(2);
if(g_bZabawa)
{
new iLol;
for(new i = 1; i <= get_maxplayers(); i++){
if(i == KID)
continue;
if(get_user_team(i) != 1)
continue;
if(g_iGrupa[i] == -1)
iLol++;
}
if(iLol == 0)
client_print(id, print_chat, "0 graczy w grupie -1");
if(iLol == 1)
client_print(id, print_chat, "ostatni gracz w grupie -1");
}
Użytkownik Kubaczek <3 edytował ten post 29.08.2012 20:54
#8
Napisano 29.08.2012 21:31
DarkGL to mój autorytet.
skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować
#9
Napisano 29.08.2012 22:16
#10
Napisano 29.08.2012 23:19
DarkGL to mój autorytet.
skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować
#11
Napisano 29.08.2012 23:37
public DeathMsg(){
new KID = read_data(1);
new VID = read_data(2);
if(g_bZabawa)
{
new grupaUjemna;
new grupaPierwsza;
for(new i = 1; i <= get_maxplayers(); i++){
if(i == KID)
continue;
if(get_user_team(i) != 1)
continue;
switch(g_iGrupa[i])
{
case -1: grupaUjemna++;
case 1: grupaPierwsza++;
}
}
}
Gdy masz np 5 grup (powyżej -1 oczywiście, bo -1 w tablice nie wejdzie^^) możesz dać tablicę zamiast grupaPierwsza + pętlę
#12
Napisano 30.08.2012 00:13
Grupy są zapisywane i przy starcie mapy wszystkie są ładowane w tablice dynamiczne, więc przy 100 utworzonych grupach może być to mało wydajne. Jeżeli to będzie jedyne wyjście to dopiero tak zrobię.
DarkGL to mój autorytet.
skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować
#13
Napisano 30.08.2012 10:37
#14
Napisano 30.08.2012 11:17
DarkGL to mój autorytet.
skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować
#15
Napisano 01.09.2012 09:51
DarkGL to mój autorytet.
skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować
#16 Gość_21977_*
Napisano 03.09.2012 00:55
Podejrzewam, że docelowo zamiast "lub" powinno widnieć "albo" (nie żebym się czepiał ) i na tym przypuszczeniu oprę swój kod:
#include <amxmodx>
#include <hamsandwich>
new g_iGrupa[33];
new g_maxPlayers; // maxymalna liczba graczy
public plugin_init() {
register_plugin("last group detect", "0.1", "benio101");
RegisterHam(Ham_Killed, "player", "Ham_Killed_Post", 1); // rejestrujemy zdarzenie zabojstwa
// dlaczego 1 na końcu? ponieważ chcemy zarejestrować wykonane już zabójstwo
// hook Ham_Killed z 0 na końcu może zostać zablokowany poprzez zwrócenie HAM_SUPERCEDE
// wówczas do zabójstwa nie dojdzie, a my go i tak wykryjemy. Dlatego istotna jest ta jedynka.
}
public plugin_cfg(){
// pobranie maxymalnej liczby graczy na serwerze
// (tak - to w uproszczeniu tzw. liczba slotów)
g_maxPlayers=get_maxplayers();
}
public Ham_Killed_Post(vid, kid){
// vid - victim id - id ofiary (zabitego)
// kid - killer id - id zabojcy
new groups[33]; // tutaj bedziemy przechowywac numery grup pozostalych zyjacych terrorystow
// grup nie moze byc wiecej niz 33, wiec taki ustawimy jej rozmiar
new groupsNum=0; // tutaj bedziemy przechowywac liczbe tych grup w tablicy groups[]
for(new id=1; id<g_maxPlayers; ++id){
// dla kazdego gracza...
// numery graczy to od 1 do g_maxPlayers wlacznie
if(
is_user_alive(id) && // jesli zyje
get_user_team(id)==1 // i jest terrorysta (1 - TT, 2 - CT, 3 - Spect, 0 - Unassigned)
){
groups[groupsNum]=g_iGrupa[id]; // dodajemy grupe gracza do tablicy grup
++groupsNum; // zwiekszamy liczbe wpisow w tablicy
}
}
// teraz mamy pelna tablice groups[groupsNum] wypelniona grupami zyjacych terrorystow
if(groupsNum==0){
// to oznacza, ze nie ma juz zadnego zyjacego terrorysty
// nie wiem, co w tym wypadku zamierzasz zrobic, ale kod wklep wlasnie tutaj
return PLUGIN_CONTINUE; // poki co, nie zrobimy w takim wypadku absolutnie nic
} else {
// zyje przynajmniej jeden terrorysta, wiec przejdzmy do sprawdzania
new group; // tutaj bedziemy przechowywac id pierwszej napotkanej grupy
// jesli kolejna napotkana grupa bedzie inna, niz pierwsza, to oznacza
// ze mamy do czynienia z kilkoma grupami, wiec mozemy przerwac dzialanie
// jesli natomiast grupa jest taka sama, to jesli id grupy == -1, to
// oznacza, ze mamy kilka osob bez grupy, w przeciwnym wypadku to musi
// byc czlonek tej samej, pierwszej grupy, wiec idziemy wszystko jest ok
group=groups[0]; // no i pobieramy wartosc pierwszej grupy z tablicy grup
for(new i=1; i<groupsNum; ++i){
// przeszukujemy kolejne wartosci tablicy groups[groupsNum]
// pomijajac pierwsza, ktora zapisana jest jako zmienna group
if(groups[i]!=group){
// no wlasnie, grupy sa inne, czyli mozemy przerwac dalsze zwracanie
// to nie jest jeszcze ten moment, ktorego szukamy, gdyz musza
// istniec przynajmniej 2 rozne grupy (albo grupa + brak grupy)
return PLUGIN_CONTINUE;
}
// grupy sa takie same, wiec sprawdzmy, czy grupa ta nie jest grupa o id=-1
// czyli, czy nie mamy do czynienia z kilkoma zyjacymi terrorystami bez grupy
if(group==-1){
// jesli grupa wynosi -1, to nie jest jeszcze ten moment
// ktorego szukamy, wiec mozemy przerwac dalsze sprawdzanie
// gryz mamy przynajmniej 2 zyjacych terrorystow bez grupy
return PLUGIN_CONTINUE;
}
// jesli doszlismy az tutaj, to grupa musi byc taka sama
// (wczesniej nie spelniony warunek if(groups[i]!=group))
// oraz grupa musi byc rozna od -1, czyli jest to grupa
// tym samym mozemy pozwolic na przejscie do kolejnego sprawdzania
// az w koncu dojdziemy (lub nie) do konca wykonywania petli for
}
// jesli tutaj doszlismy, to oznacza, ze nastapil wlasnie ten moment,
// kiedy pozostala ostatnia grupa zywych terrorystow lub ostatni terrorysta
// bez grupy, a pod zmienna kid kryje sie id zabojcy, teraz mozna wreszcie wykonac:
Koniec(kid);
}
return PLUGIN_CONTINUE;
}
#17
Napisano 04.09.2012 20:44
Łopatologicznie wytłumaczone, do zamknięcia.
DarkGL to mój autorytet.
skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować
#18 Gość_21977_*
Napisano 04.09.2012 20:47
Ten temat został zamknięty przez moderatora.
Powód: Pomoc udzielona
Jeśli się z tym nie zgadzasz, raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.
Z pozdrowieniami,
Zespół AMXX.PL
Użytkownicy przeglądający ten temat: 1
0 użytkowników, 1 gości, 0 anonimowych