Funkcja czasowa
EufooZ
13.04.2011
Witam, czy taki zapis będzie działać ? Chciałbym aby po 3.5 sekundach nowej rundy wykonywał się dany kod w tym przypadku mam tak:
Oraz po 5 sekundzie nowej rundy wykonywał się ten kod:
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
//tutaj kody.......
set_task(3.5, "wywal", 0)
//tutaj kody.......
}
public wywal(id)
{
strip_user_weapons(id)
}
Oraz po 5 sekundzie nowej rundy wykonywał się ten kod:
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
//tutaj kody.......
set_task(5.0, "menu_broni", 0)
//tutaj kody.......
}
public menu_broni(id)
{
menu = menu_create("Menu broni","menu_broni_wybierz")
menu_additem(menu,"Marker + HE")
menu_additem(menu,"Super Marker + HE (Tylko dla VIP)")
//tutaj kod leci dalej ....
speedkill
13.04.2011
A nie łatwiej kod tam gdzie menu
case 1
strip_user_weapons
give_item ...
case 1
strip_user_weapons
give_item ...
EufooZ
13.04.2011
Też tak mam, lecz chodzi o to, że PB na początku rundy automatycznie daje bronie, dlatego chce je najpierw wywalić
Leihto
13.04.2011
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
//tutaj kody.......
set_task(3.5, "wywal", 0)
//tutaj kody.......
}
To nie bedzie dzialac Dlatego ze plugin_init jest przy zmianie mapy
Zastosuj odpowiedniego eventa, lub wykonaj to gdy gracz sie spawnuje
Czyli uzywajac hama tak:
RegisterHam(Ham_Spawn, "player", "funkcja", 1);
Pozdrawiam
Użytkownik Blak Rajder edytował ten post 14.04.2011 15:00
Ortega
13.04.2011
@up
Co do wątku można za pomocą rożnych eventów czy forwardów czy wirtualnych funkcji przechwycić to co chcesz ale najlepiej posłużyć się eventem nowej rundy bez zbędnych udziwnień. Oczywiście event ten nie posiada INDEKSU GRACZA ( bo niby skąd ), dlatego pobieranie 1 parametru jest bezsensowne.
void C_ServerActivate_Post(edict_t *pEdictList, int edictCount, int clientMax) { if (g_activated) RETURN_META(MRES_IGNORED); for (int i = 1; i <= gpGlobals->maxClients; ++i) { CPlayer *pPlayer = GET_PLAYER_POINTER_I(i); pPlayer->Init(pEdictList + i, i); } executeForwards(FF_PluginInit); executeForwards(FF_PluginCfg);Tak właśnie się zaczyna wykonywanie forwardu plugin_initialize.( amxmodx source 1.8.1 ) ServerActivate_Post wskazuje w sposób oczywisty, że po wykonaniu najważniejszych czynności ( precache ). Co de facto występuje po zmianie mapy albo przeładowaniu aplikacji.
Co do wątku można za pomocą rożnych eventów czy forwardów czy wirtualnych funkcji przechwycić to co chcesz ale najlepiej posłużyć się eventem nowej rundy bez zbędnych udziwnień. Oczywiście event ten nie posiada INDEKSU GRACZA ( bo niby skąd ), dlatego pobieranie 1 parametru jest bezsensowne.
EufooZ
13.04.2011
Ale chyba i tak będzie działało... matko teraz to już kompletnie nic nie rozumiem..
Blak Rajder, nie pozdrawiaj bo walisz mi głupoty (nie co do set_task) jak byś poczytał ze zrozumieniem, to byś wiedział, że chcę wykonać to po danym czasie a nie od razu przy respie ......
Przecież jak się respi to wykonuje się czynność to tak samo jak co każdą runde co ileś czasu wykonuje się czynność ...
Dodano 13 kwiecień 2011 - 18:03:
Nie chce od nowej rundy bo to mnie zupełnie nie interesuje .
Dodano 13 kwiecień 2011 - 18:04:
Chcę aby co runde wykonywało daną czynność tak jak jest to w set_task po odstępie danego czasu tylko raz na runde od jej startu.
Blak Rajder, nie pozdrawiaj bo walisz mi głupoty (nie co do set_task) jak byś poczytał ze zrozumieniem, to byś wiedział, że chcę wykonać to po danym czasie a nie od razu przy respie ......
Przecież jak się respi to wykonuje się czynność to tak samo jak co każdą runde co ileś czasu wykonuje się czynność ...
Dodano 13 kwiecień 2011 - 18:03:
Nie chce od nowej rundy bo to mnie zupełnie nie interesuje .
Dodano 13 kwiecień 2011 - 18:04:
Chcę aby co runde wykonywało daną czynność tak jak jest to w set_task po odstępie danego czasu tylko raz na runde od jej startu.
Leihto
14.04.2011
Blak Rajder, nie pozdrawiaj bo walisz mi głupoty (nie co do set_task) jak byś poczytał ze zrozumieniem, to byś wiedział, że chcę wykonać to po danym czasie a nie od razu przy respie ......
Widze ze myslenie zanika..
#include <amxmodx>
#include <hamsandwich>
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
RegisterHam(Ham_Spawn, "player", "funkcja", 1)
}
public funkcja(id)
{
set_task(3.0, "wyrzuc")
}
public wyrzuc(id)
{
strip_user_weapons(id)
}
A dalej tak robisz..
#include <amxmodx>
#include <hamsandwich>
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
RegisterHam(Ham_Spawn, "player", "funkcja", 1)
}
public funkcja(id)
{
set_task(3.0, "wyrzuc")
set_task(5.0, "menu_broni")
}
public wyrzuc(id)
{
strip_user_weapons(id)
}
public menu_broni(id)
{
menu = menu_create("Menu broni","menu_broni_wybierz")
menu_additem(menu,"Marker + HE")
menu_additem(menu,"Super Marker + HE (Tylko dla VIP)")
//tutaj kod leci dalej ....
}
@edit
Kody sa pisane w notatniku :<
@ i jeszcze jedno
Jak wykonasz eventa na poczatek rundy, to gdy osoba wejdzie chwile po poczatku to sie juz mu nie wykona akcja..
Użytkownik Blak Rajder edytował ten post 14.04.2011 14:59
diablix
14.04.2011
Blak Rajder, nie pozdrawiaj bo walisz mi głupoty (nie co do set_task) jak byś poczytał ze zrozumieniem, to byś wiedział, że chcę wykonać to po danym czasie a nie od razu przy respie ......
Widze ze myslenie zanika..#include <amxmodx>
#include <hamsandwich>
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
RegisterHam(Ham_Spawn, "player", "funkcja", 1)
}
public funkcja(id)
{
set_task(3.0, "wyrzuc")
}
public wyrzuc(id)
{
strip_user_weapons(id)
}
A dalej tak robisz..#include <amxmodx>
#include <hamsandwich>
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
RegisterHam(Ham_Spawn, "player", "funkcja", 1)
}
public funkcja(id)
{
set_task(3.0, "wyrzuc")
set_task(5.0, "menu_broni")
}
public wyrzuc(id)
{
strip_user_weapons(id)
}
public menu_broni(id)
{
menu = menu_create("Menu broni","menu_broni_wybierz")
menu_additem(menu,"Marker + HE")
menu_additem(menu,"Super Marker + HE (Tylko dla VIP)")
//tutaj kod leci dalej ....
}
@edit
Kody sa pisane w notatniku :<
@ i jeszcze jedno
Jak wykonasz eventa na poczatek rundy, to gdy osoba wejdzie chwile po poczatku to sie juz mu nie wykona akcja..
Bzdury.. jak chcesz wykonać task skoro nie nadałeś indeksu?
#include <amxmodx>
#include <hamsandwich>
#define TASK_INFO 1337
static const VERSION[] = "0.1";
public plugin_init() {
register_plugin("Task po odrodzeniu", VERSION, "diablix");
RegisterHam(Ham_Spawn, "player", "eventPlayerSpawn", 1);
}
public eventPlayerSpawn(id){
if(task_exists(TASK_INFO + id)) remove_task(TASK_INFO + id);
set_task(3.0, "showMessage", TASK_INFO + id);
}
public showMessage(id){
id -= TASK_INFO;
client_print(id, 3, "Task zostak wykonany!");
}