Otwórz diablo_quest.sma.
Znajdź:
new questy_zabil[][]={
"Lowcy",
"Ninjow",
"Nekromantow",
"Magow",
"Zabojcow",
"Assasinow",
"Lowcow",
"Kaplanow",
"Diablow",
"Barbarzyncow",
"Paladynow",
"Aniolow",
"Paladynow",
"Barbarzyncow",
"Barbarzyncow"
}
I dodaj pod:
new g_Forward[ 3 ];
Następnie znajdź:
register_clcmd("say /quest","menu_questow")
I dodaj niżej to:
g_Forward[ 0 ] = CreateMultiForward("quest_complete", ET_CONTINUE, FP_CELL, FP_CELL);
Następnie znajdź:
client_print(iKiller,print_chat,"Wykonales zadanie %s gratulacje otrzymujesz %i expa!",questy_info[iQuest[iKiller]],questy[iQuest[iKiller]][2])
zapisz_questa(iKiller,iQuest[iKiller]);
diablo_give_xp( iKiller , questy[iQuest[iKiller]][2])
iQuest[ iKiller ] = 0;
zapisz_aktualny_quest(iKiller)
I zamień na to:
new iRet;
ExecuteForward( g_Forward, iRet, iKiller, iQuest[ iKiller ] );
if( !iRet )
return 0;
client_print(iKiller,print_chat,"Wykonales zadanie %s gratulacje otrzymujesz %i expa!",questy_info[iQuest[iKiller]],questy[iQuest[iKiller]][2])
zapisz_questa(iKiller,iQuest[iKiller]);
diablo_give_xp( iKiller , questy[iQuest[iKiller]][2])
iQuest[ iKiller ] = 0;
zapisz_aktualny_quest(iKiller)
Teraz w pluginie, w którym chcesz wykryć ukończenie questa na początku pod #include dodaj:
forward quest_complete( id, quest_id );
A później po prostu w tym forwardzie dla konkretnego questa sprawdzamy jego id. Jeżeli nie dodawałeś/usawałeś questów to id są od 1 do 15.
Zwróć 0, aby zatrzymać zdarzenie.
Zwróć dowolną wartość, aby kontynuować zdarzenie.
Wykrycie rozpoczęcia zadania i możliwość zablokowania
Znajdź:
register_clcmd("say /quest","menu_questow")
I dodaj pod:
g_Forward[ 1 ] = CreateMultiForward("quest_get", ET_CONTINUE, FP_CELL, FP_CELL);
Znajdź:
public menu_questow_handle2(id,menu,item){
if(item == MENU_EXIT){
menu_destroy(menu);
return PLUGIN_CONTINUE;
}
new access , callback;
new szInfo[ 128] , szName[ 128 ] , iLen;
menu_item_getinfo( menu , item , access , szInfo , charsmax( szInfo ) , szName, iLen , callback );
item = str_to_num( szInfo );
if(questy[item][3] && !(get_user_flags(id) & ADMIN_LEVEL_H)){
client_print(id,print_chat,"Ten quest jest tylko dla vipow!");
menu_destroy(menu);
menu_questow( id );
return PLUGIN_CONTINUE;
}
if(wczytaj_questa(id,item)){
client_print(id,print_chat,"Wykonales juz to zadanie!");
menu_destroy(menu);
menu_questow(id)
return PLUGIN_CONTINUE;
}
iQuest[id] = item;
iIle[id] = 0;
zapisz_aktualny_quest(id)
client_print(id,print_chat,"Wybrales zadanie: %s powodzenia !",questy_info[item] );
menu_destroy(menu);
return PLUGIN_CONTINUE;
}
I zamień na:
public menu_questow_handle2(id,menu,item){
if(item == MENU_EXIT){
menu_destroy(menu);
return PLUGIN_CONTINUE;
}
new access , callback;
new szInfo[ 128] , szName[ 128 ] , iLen;
menu_item_getinfo( menu , item , access , szInfo , charsmax( szInfo ) , szName, iLen , callback );
item = str_to_num( szInfo );
if(questy[item][3] && !(get_user_flags(id) & ADMIN_LEVEL_H)){
client_print(id,print_chat,"Ten quest jest tylko dla vipow!");
menu_destroy(menu);
menu_questow( id );
return PLUGIN_CONTINUE;
}
if(wczytaj_questa(id,item)){
client_print(id,print_chat,"Wykonales juz to zadanie!");
menu_destroy(menu);
menu_questow(id)
return PLUGIN_CONTINUE;
}
new iRet;
ExecuteForward( g_Forward[ 1 ], iRet, id, item );
if( !iRet )
return 0;
iQuest[id] = item;
iIle[id] = 0;
zapisz_aktualny_quest(id)
client_print(id,print_chat,"Wybrales zadanie: %s powodzenia !",questy_info[item] );
menu_destroy(menu);
return PLUGIN_CONTINUE;
}
Teraz w pluginie, w którym chcesz wykryć rozpoczęcie questa na początku pod #include dodaj:
forward quest_get( id, quest_id );
A później po prostu w tym forwardzie dla konkretnego questa sprawdzamy jego id. Jeżeli nie dodawałeś/usuwałeś questów to id są od 1 do 15.
Zwróć 0, aby zatrzymać zdarzenie.
Zwróć dowolną wartość, aby kontynuować zdarzenie.
Wykrycie postępu w zadaniu i możliwość zablokowania
Znajdź:
register_clcmd("say /quest","menu_questow")
Dodaj niżej:
g_Forward[ 2 ] = CreateMultiForward("quest_progress", ET_CONTINUE, FP_CELL, FP_CELL, FP_CELL)
Znajdź ( w funkcji diablo_death ):
iIle[iKiller]++;
zapisz_aktualny_quest(iKiller);
I zamień na:
new iReturn;
ExecuteForward( g_Forward, iReturn, iKiller, iQuest[ iKiller ], iIle[iKiller]+1 );
if( !iReturn )
return 0;
iIle[iKiller]++;
zapisz_aktualny_quest(iKiller);
Teraz w pluginie, w którym chcesz wykryć postęp questa na początku pod #include dodaj:
forward quest_progress( id, quest_id );
A później po prostu w tym forwardzie dla konkretnego questa sprawdzamy jego id. Jeżeli nie dodawałeś/usawałeś questów to id są od 1 do 15.
Zwróć 0, aby zatrzymać zdarzenie.
Zwróć dowolną wartość, aby kontynuować zdarzenie.
Mam nadzieję że poradnik się przyda, mi się przyda to pomyślałem że podzielę się z wami.