Funkcja na 4 losowych graczach...
Harsay
25.05.2010
Mam pytanie.
Jak napisać funkcję która wybiera 4 losowych graczy i wykonuje na nich np. przeniesienie do CT a reszta co nie została wybrana żeby przeszła do TT.
Czekam na odpowiedź!
Jak napisać funkcję która wybiera 4 losowych graczy i wykonuje na nich np. przeniesienie do CT a reszta co nie została wybrana żeby przeszła do TT.
Czekam na odpowiedź!
mgr inż. Pavulon
25.05.2010
Ja bym to zrobił na tablicach dynamicznych.
Najpierw pobranie listy graczy. get_players
Następnie pętla na nich wszystkich ze sprawdzaniem jakiegoś warunku(np. team) oraz dokładaniem do tablicy dynamicznej. ArrayPushCell
A na koniec losowanie oraz pobieranie i usuwanie wylosowanych graczy z tablicy dynamicznej. ArrayGetCell, ArrayDeleteItem
Najpierw pobranie listy graczy. get_players
Następnie pętla na nich wszystkich ze sprawdzaniem jakiegoś warunku(np. team) oraz dokładaniem do tablicy dynamicznej. ArrayPushCell
A na koniec losowanie oraz pobieranie i usuwanie wylosowanych graczy z tablicy dynamicznej. ArrayGetCell, ArrayDeleteItem
byCZUS
25.05.2010
public costutaj()
{
new players[32], num
new bool: wylosowany[33]
get_players(players, num)
if(num > 1)
{
for(new i = 0; i < num; i++) wylosowany[players[i]] = false
new i = 0
while(i < 5)
{
wylosowany[players[random_num(0, num-1)]] = true
i++
}
for(new i = 0; i < num; i++)
{
if(wylosowany[players[i]])
{
// tutaj co chcesz zrobic z wylosowanymi id - players[i]
}
else
{
// z reszta
}
}
}
}
Harsay
25.05.2010
Pavulon i byQQ, wielkie dzięki.
Pavulon - Fajnie że napisałeś z czego mam to zrobić i dzięki temu ruszyłem głową do obmyślania jak to złożyć. + leci!
byQQ - Dzięki za podanie całego kodu! + leci!
Pavulon - Fajnie że napisałeś z czego mam to zrobić i dzięki temu ruszyłem głową do obmyślania jak to złożyć. + leci!
byQQ - Dzięki za podanie całego kodu! + leci!
byCZUS
25.05.2010
Można to zrobić to tak
Edited by byQQ, 25.05.2010 15:15.
while(i < 5)
{
new losowy = players[random_num(0, num-1)]
if(!wylosowany[losowy])
{
wylosowany[losowy] = true
i++
}
}
Edited by byQQ, 25.05.2010 15:15.
Harsay
25.05.2010
A czy ta funkcja wykonywana jest też na botach?
@edit
Bo akurat jak testuje na botach to nie działa.
Edited by Harsay, 25.05.2010 15:19.
@edit
Bo akurat jak testuje na botach to nie działa.
Edited by Harsay, 25.05.2010 15:19.
byCZUS
25.05.2010
tak na botach również jest wykonywana. Jeśli tego nie chcesz get_players powinien wyglądać tak
get_players(players, num, "c")
Harsay
25.05.2010
Dobra ale to wtedy jest dziwne bo akurat normalnie nie losuje bez flagi "c" a chcę aby uzwględniało boty.
Edited by Harsay, 25.05.2010 19:34.
Edited by Harsay, 25.05.2010 19:34.
Harsay
26.05.2010
Oto okrojony kodzik:
Coś jest źle?
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_logevent("poczatek", 2, "1=Round_Start") ... } public poczatek() { for(new i=1;i<33;i++){ if (!is_user_alive(i)) continue ... set_task(1.0, "losowanie", i) ... } } public losowanie() { new players[32], num new bool: wylosowany[33] get_players(players, num) if(num > 1) { for(new i = 0; i < num; i++) wylosowany[players[i]] = false new i = 0 while(i < 5) { new losowy = players[random_num(0, num-1)] if(!wylosowany[losowy]) { wylosowany[losowy] = true i++ } for(new i = 0; i < num; i++) { if(wylosowany[players[i]]) { /// KOD którego nie ujawniam. } else { /// kod którego nie ujawniam { case 1: { // jak wyżej } case 2: { // jak wyżej } case 3: { // jak wyżej } } } } } } }
Coś jest źle?
byCZUS
26.05.2010
nie wiem po co do set_taska nadajesz id, do tego używasz case ale nie widzę switch.
Harsay
26.05.2010
Dobra cały kod:
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_logevent("poczatek", 2, "1=Round_Start") register_logevent("koniec", 2, "1=Round_End") register_event("DeathMsg", "DeathMsg", "b") RegisterHam(Ham_Touch, "weaponbox", "fw_TouchWeapon") RegisterHam(Ham_Touch, "armoury_entity", "fw_TouchWeapon") RegisterHam(Ham_Touch, "weapon_shield", "fw_TouchWeapon") set_lights("b") } public poczatek() { for(new i=1;i<33;i++){ if (!is_user_alive(i)) continue strip_user_weapons(i); cs_set_user_money(i, 0); set_task(1.0, "losowanie", i) set_task(10.0, "reklama",i) set_hudmessage(i, 255, 0, 0.18, 0.24, 0, 6.0, 12.0) show_hudmessage(i, "Ludzie musza przetrwac 5 minut!") ColorChat(0, GREEN,"[ZOMGies] Ludzie musza przetrwac 5 minut!") } } public losowanie() { new players[32], num new bool: wylosowany[33] get_players(players, num) if(num > 1) { for(new i = 0; i < num; i++) wylosowany[players[i]] = false new i = 0 while(i < 5) { new losowy = players[random_num(0, num-1)] if(!wylosowany[losowy]) { wylosowany[losowy] = true i++ } for(new i = 0; i < num; i++) { if(wylosowany[players[i]]) { cs_set_user_team(i, CS_TEAM_CT) cs_set_user_model(i, "vip") set_user_health(i, 200) set_user_armor(i, 100) give_item (i, "weapon_m4a1") give_item (i, "weapon_deagle") give_item (i, "ammo_556nato") give_item (i, "ammo_50ae") give_item (i, "ammo_556nato") give_item (i, "ammo_50ae") give_item (i, "ammo_556nato") give_item (i, "ammo_50ae") give_item (i, "he_grenade") } else { cs_set_user_team(i, CS_TEAM_T) set_user_gravity(i, 0.40) set_user_health(i, 90) give_item(i, "weapon_knife") set_user_maxspeed (i, 720.0) switch ( random_num( 1, 3 ) ) { case 1: { cs_set_user_model(i, "zombie_guerilla") } case 2: { cs_set_user_model(i, "zombie_gign") } case 3: { cs_set_user_model(i, "zombie_source") } } } } } } } public koniec(id) { ColorChat(id, GREEN,"[ZOMGies] Koniec walki!") client_cmd(id, "spk ZOMGies/koniec_walki.wav") } public reklama(id) { ColorChat(id, GREEN,"***********SERWER UZYWA***********") ColorChat(id, GREEN,"ZOMGies MOD by Harsay") ColorChat(id, GREEN,"Wersja: v0.3a") ColorChat(id, GREEN,"Strona autora: www.harsay.rfv.pl") ColorChat(id, GREEN,"Pomoc przy tworzeniu: [H]ARD[B]OT, DarkGL, [G]o[Q], Pavulon, byQQ, DeLL") } public DeathMsg(id) { if(cs_get_user_team(id) == CS_TEAM_T) ExecuteHamB(Ham_CS_RoundRespawn, id) } public fw_TouchWeapon(weapon,id) { if (!is_user_connected(id)) return HAM_IGNORED; if(get_user_team(id) == 1) return HAM_SUPERCEDE; return HAM_IGNORED; } public plugin_precache() { precache_sound("ZOMGies/koniec_walki.wav") precache_model("models/player/zombie_guerilla/zombie_guerilla.mdl") precache_model("models/player/zombie_gign/zombie_gign.mdl") precache_model("models/player/zombie_source/zombie_source.mdl") }
R3X
26.05.2010
Używasz zmiennej i np. tu
cs_set_user_team(i, CS_TEAM_CT)gdy id gracza jest tak naprawdę w players[i]
give_item (i, "he_grenade")ten fragment nie powoduje errorlogów?
Harsay
27.05.2010
Rozumiem że zamiast:
Mam dać
@zrobiłem tak i same errory przy kompilacji wywala
Edited by Harsay, 27.05.2010 09:35.
cs_set_user_team(i, CS_TEAM_CT)
Mam dać
cs_set_user_team( CS_TEAM_CT )
@zrobiłem tak i same errory przy kompilacji wywala
Edited by Harsay, 27.05.2010 09:35.
kyku
27.05.2010
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_logevent("poczatek", 2, "1=Round_Start")
register_logevent("koniec", 2, "1=Round_End")
register_event("DeathMsg", "DeathMsg", "b")
RegisterHam(Ham_Touch, "weaponbox", "fw_TouchWeapon")
RegisterHam(Ham_Touch, "armoury_entity", "fw_TouchWeapon")
RegisterHam(Ham_Touch, "weapon_shield", "fw_TouchWeapon")
set_lights("b")
}
public poczatek() {
strip_user_weapons(0);
cs_set_user_money(0, 0);
set_task(1.0, "losowanie")
set_task(10.0, "reklama")
set_hudmessage(0, 255, 0, 0.18, 0.24, 0, 6.0, 12.0)
show_hudmessage(0, "Ludzie musza przetrwac 5 minut!")
ColorChat(0, GREEN,"[ZOMGies] Ludzie musza przetrwac 5 minut!")
}
public losowanie()
{
new ilu_losowac = 5 // jak chcesz to zmien (ile osob ma miec wylosowany[id] = true;)
new players[32], num, jest
new bool: wylosowany[33]
get_players(players, num, "a" ) // tylko zywi
if(num >= ilu_losowac)
{
while(jest<ilu_losowac){
new id = players[random_num(0, num)]
if(is_user_connected(id) && is_user_alive(id)){
wylosowany[id] = true;
jest++;
}
}
for(new id=0; id<num; id++){
new i = players[id];
if(wylosowany[i]){
if(get_user_team(i) != CS_TEAM_CT) cs_set_user_team(i, CS_TEAM_CT) // po co przenosic skoro jest w tym teamie?
cs_set_user_model(i, "vip")
set_user_health(i, 200)
set_user_armor(i, 100)
give_item (i, "weapon_m4a1")
give_item (i, "weapon_deagle")
give_item (i, "ammo_556nato")
give_item (i, "ammo_50ae")
give_item (i, "ammo_556nato")
give_item (i, "ammo_50ae")
give_item (i, "ammo_556nato")
give_item (i, "ammo_50ae")
give_item (i, "he_grenade")
} else {
if(get_user_team(i) != CS_TEAM_T) cs_set_user_team(i, CS_TEAM_T)
set_user_gravity(i, 0.40)
set_user_health(i, 90)
give_item(i, "weapon_knife")
set_user_maxspeed (i, 720.0)
switch ( random_num( 1, 3 ) )
{
case 1:
{
cs_set_user_model(i, "zombie_guerilla")
}
case 2:
{
cs_set_user_model(i, "zombie_gign")
}
case 3:
{
cs_set_user_model(i, "zombie_source")
}
}
}
}
}
else
client_print(0, print_chat, "Nie ma na serwerze %i osob!", ilu_losowac);
}
public koniec() { // koniec nie ma parametru ID!
ColorChat(0, GREEN,"[ZOMGies] Koniec walki!")
client_cmd(0, "spk ZOMGies/koniec_walki.wav")
}
public reklama() {
ColorChat(0, GREEN,"***********SERWER UZYWA***********")
ColorChat(0, GREEN,"ZOMGies MOD by Harsay")
ColorChat(0, GREEN,"Wersja: v0.3a")
ColorChat(0, GREEN,"Strona autora: www.harsay.rfv.pl")
ColorChat(0, GREEN,"Pomoc przy tworzeniu: [H]ARD[B]OT, DarkGL, [G]o[Q], Pavulon, byQQ, DeLL")
}
public DeathMsg() { //DeathMsg nie ma parametru ID!
new id = read_data(2)
if(cs_get_user_team(id) == CS_TEAM_T)
ExecuteHamB(Ham_CS_RoundRespawn, id) // pasowalo by to w tasku zrobic lub przynajmnniej zablokowac komende "kill"
}
public fw_TouchWeapon(weapon,id)
{
if (!is_user_connected(id))
return HAM_IGNORED;
if(get_user_team(id) == 1)
return HAM_SUPERCEDE;
return HAM_IGNORED;
}
public plugin_precache() {
precache_sound("ZOMGies/koniec_walki.wav")
precache_model("models/player/zombie_guerilla/zombie_guerilla.mdl")
precache_model("models/player/zombie_gign/zombie_gign.mdl")
precache_model("models/player/zombie_source/zombie_source.mdl")
}
Co powiesz na to? funkcje losujaca zrobilem od poczatku
27 maj 2010 - 11:42:
tylko z tego co widze to wylosowanych 5 osob bedzie jako ludzie a nie wydaje mi sie by o to Ci chodzilo.
Jak cos to zmien
if(wylosowany[i]){na
if(!wylosowany[i]){
Edited by kyku, 27.05.2010 10:48.
Harsay
27.05.2010
Dobra już sprawdzam.
@EDIT
Tylko jak ktoś jest w CT i go nie wylosuje to zmienia mu team na TT? Tak?
Edited by Harsay, 27.05.2010 10:49.
@EDIT
Tylko jak ktoś jest w CT i go nie wylosuje to zmienia mu team na TT? Tak?
Edited by Harsay, 27.05.2010 10:49.
kyku
27.05.2010
a i dodam, ze poprawilem Ci wiekszosc bugow
@ UP
tak
Edited by kyku, 27.05.2010 10:50.
@ UP
tak
Edited by kyku, 27.05.2010 10:50.
Harsay
27.05.2010
Dobra akurat trochę zmieniłem plany to możesz zmienić losowanie na takie:
Że losowane jest tylko zmiana teamu (żadne dawanie broni itp.)
Edited by Harsay, 27.05.2010 10:56.
Że losowane jest tylko zmiana teamu (żadne dawanie broni itp.)
Edited by Harsay, 27.05.2010 10:56.