buiducduy111
Dragon Quest
- 3/5/11
- 1,257
- 7
^
^
- Có cần tutorial hướng dẫn làm hệ thống class cho ZBMod ko
- ZB3 nó nhiều stuff như là: tạo dấu chân cho zb, rồi chặn không cho zb dùng entity súng của map, không cho zb nhặt súng, rồi block mua, block entity,... Những phần tử như thế nó chiếm dòng nhiềucòn main code thì khá ít
Cái đó em có hêt òi. Còn mỗi Hòm tiếp tế thì chưa... Class thì có gì đâu... Cứ kiểm tra xem có phải class đó ko (qua native) + xem có phải zombie ko... rùi chạy khác gì bình thường :) ... Chưa có skin cũng chẳng test được... Đang liều lĩnh làm AI mode... Còn vụ cái con bắn súng thì bỏ lun

---------- Post added at 19:49 ---------- Previous post was at 19:44 ----------
Thôi các bác xem dùm em lun cái zombie v 1 này với.. Có chỗ nào dùng code chưa đúng hay là dài quá thì các bác sửa lun dùm em nha ( Cái này có gần 400 Line :) ) Chưa show hud & sound gì cả Có mỗi main :)
PHP:
/* Script generated by Pawn Studio */
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <hamsandwich>
#include <fun>
#include <fakemeta>
#include <engine>
#define PLUGIN "Zombie"
#define AUTHOR "Bui Duc Duy"
#define VERSION "1.0"
new g_time_zombie_xuathien
new g_msgTextMsg
new bool: g_zombie_daxuathien, g_is_user_zombie[33] , g_is_zombie_delay[33]
new g_zombie_class[33]
new g_zombie_level[33]
new Human_Score, Zombie_score, Total_round
// class 1 : red zombie, class 2: ke huy diet, class 3 : nu y ta, class 4: smoke
new const g_remove_entities[][] =
{
"func_bomb_target",
"info_bomb_target",
"hostage_entity",
"monster_scientist",
"func_hostage_rescue",
"info_hostage_rescue",
"info_vip_start",
"func_vip_safetyzone",
"func_escapezone",
"func_buyzone"
}
enum(+=1500)
{
G_HP_zombie_level_1 = 2000,
G_HP_zombie_level_2,
G_HP_zombie_level_3,
G_HP_zombie_level_4,
G_HP_zombie_level_5
}
enum(+=100)
{
TASK_MAKEZOMBIE = 2000,
TASK_RESTORE_HP,
TASK_REAL_RESTORE_HP,
TASK_REGISTER_BOT,
TASK_OUT_GAME
}
#define ID_RESTORE_HP (taskid - TASK_RESTORE_HP)
#define ID_REAL_RESTORE_HP (taskid - TASK_REAL_RESTORE_HP)
#define ID_REGISTER_BOT (taskid - TASK_REGISTER_BOT)
// ========= NATIVE============
public plugin_natives()
{
register_native("bdd_is_user_zombie", "native_bdd_is_user_zombie", 1)
register_native("bdd_get_user_class", "native_bdd_get_user_class", 1)
register_native("bdd_get_user_level", "native_bdd_get_user_level", 1)
register_native("bdd_get_zombie_score", "native_bdd_get_zombie_score", 1)
register_native("bdd_get_human_score", "native_bdd_get_human_score", 1)
}
public native_bdd_is_user_zombie(id)
{
return g_is_user_zombie[id]
}
public native_bdd_is_user_level(id)
{
return g_zombie_level[id]
}
public native_bdd_get_user_class(id)
{
return g_zombie_class[id]
}
public native_bdd_get_zombie_score()
{
return Zombie_score
}
public native_bdd_get_human_score()
{
return Human_Score
}
//========== END ============
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
register_logevent("logevent_round_start",2, "1=Round_Start")
register_logevent("logevent_round_end", 2, "1=Round_End")
RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
RegisterHam(Ham_Touch, "weaponbox", "fw_touch_weapon")
register_forward(FM_Spawn, "fwd_spawn")
register_message(get_user_msgid("SendAudio"), "message_sendaudio")
register_message(get_user_msgid("TextMsg"), "message_textmsg")
register_message(get_user_msgid("Scenario"), "message_scenario")
g_msgTextMsg = get_user_msgid("TextMsg")
}
//Dang ki BOT
public client_putinserver(id)
{
set_task(0.1, "register_cz_function", id + 5230)
}
public register_bot_function(taskid)
{
new id = ID_REGISTER_BOT
if (is_user_bot(id) && get_cvar_num("bot_quota"))
{
RegisterHamFromEntity(Ham_TakeDamage, id, "fw_TakeDamage")
}
}
// disabel a cs default
public message_textmsg()
{
static textmsg[22]
get_msg_arg_string(2, textmsg, sizeof textmsg - 1);
if (equal(textmsg, "#Hostages_Not_Rescued") || equal(textmsg, "#Round_Draw") || equal(textmsg, "#Terrorists_Win") || equal(textmsg, "#CTs_Win") || equal(textmsg, "#Target_", 8))
set_msg_arg_string(2, "")
return PLUGIN_CONTINUE
}
public message_sendaudio()
{
static audio[17]
get_msg_arg_string(2, audio, sizeof audio - 1)
if(equal(audio[7], "terwin") || equal(audio[7], "ctwin") || equal(audio[7], "rounddraw"))
set_msg_arg_string(2, "")
return PLUGIN_CONTINUE;
}
public message_scenario()
{
if (get_msg_args() > 1)
{
static sprite[8]
get_msg_arg_string(2, sprite, sizeof sprite - 1)
if (equal(sprite, "hostage"))
return PLUGIN_HANDLED;
}
return PLUGIN_CONTINUE;
}
///=== END=========
// Take damage to human -> zombie
public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
{
if (victim == attacker)
return HAM_IGNORED;
if (!is_user_connected(victim) || !is_user_connected(attacker))
return HAM_IGNORED;
// Zombie hit human
if (g_is_user_zombie[attacker] && !g_is_user_zombie[victim])
{
g_zombie_level[attacker] ++
g_is_user_zombie[victim] = true
g_zombie_level[victim] = 1
Update_frag(attacker)
Update_dead(victim)
set_user_to_zombie(victim, 1, G_HP_zombie_level_1, random_num(1,4))
set_task(2.0, "check_zombie_delay",victim+TASK_RESTORE_HP,_,_,"b")
}
//Zombie ---> when damge
if (!g_is_user_zombie[attacker] && g_is_user_zombie[victim])
{
new Float:Zombie_damage[3]
VelocityByAim(victim, 1, Zombie_damage)
set_pev(victim, pev_velocity, Zombie_damage)
}
return HAM_IGNORED
}
// Kiem tra de hoi mau
public check_zombie_delay(taskid)
{
new id = ID_RESTORE_HP
check_zombie_to_restore_HP(id)
if (g_is_zombie_delay[id])
{
if (task_exists(id + TASK_REAL_RESTORE_HP)) remove_task(id + TASK_REAL_RESTORE_HP)
set_task(2.0, "real_restore_HP_ZB",id+TASK_REAL_RESTORE_HP,_,_,"b")
}
}
// HOI MAU
public real_restore_HP_ZB(taskid)
{
new id = ID_REAL_RESTORE_HP
new zombie_hp_now = get_user_health(id)
set_user_health(id, zombie_hp_now + 200)
if (!g_is_zombie_delay[id] && task_exists(id + TASK_REAL_RESTORE_HP)) remove_task(id + TASK_REAL_RESTORE_HP)
}
//Log event Round end
public logevent_round_end()
{
static player_zombie[32], player_human[32], Number_zombie, Number_human
get_players(player_human,Number_human,"a","CT")
get_players(player_zombie,Number_zombie,"a","T")
if (Number_human == 0 && Number_zombie != 0)
{
Zombie_score++
client_print(0, print_center, "Zombie Win")
}
if (Number_human != 0 && Number_zombie == 0)
{
Human_Score++
client_print(0, print_center, "Human Win")
}
if (Zombie_score+Human_Score == Total_round) set_task(5.0, "me_out_team",TASK_OUT_GAME)
}
// new round
public event_round_start()
{
reset_all_data()
}
// khong cho luom sung _zombie
public fw_touch_weapon(ent, id)
{
if (g_is_user_zombie[id])
return HAM_SUPERCEDE
return HAM_IGNORED;
}
// SU kien bat dau van moi
public logevent_round_start()
{
task_zombie_count()
if (task_exists(TASK_MAKEZOMBIE)) remove_task(TASK_MAKEZOMBIE)
set_task(1.0, "task_zombie_count", TASK_MAKEZOMBIE, _, _, "b")
}
public task_zombie_count()
{
new message[128]
if (g_time_zombie_xuathien == 0)
{
format(message,charsmax(message),"Quai vat da xuat hien !")
make_random_zombie()
g_zombie_daxuathien = true
}
else
{
format(message,charsmax(message),"Quai vat se xuat hien sau %i giay nua.", g_time_zombie_xuathien)
}
g_time_zombie_xuathien -= 1
SendCenterText(0, message)
if (g_zombie_daxuathien) remove_task(TASK_MAKEZOMBIE)
}
// Block all cs defaut
public fwd_spawn(ent)
{
if(!pev_valid(ent))
return FMRES_IGNORED
static classname[32]
pev(ent, pev_classname, classname, 31)
static i
for(i = 0; i < sizeof g_remove_entities; ++i)
{
if(equal(classname, g_remove_entities[i]))
{
engfunc(EngFunc_RemoveEntity, ent)
return FMRES_SUPERCEDE
}
}
return FMRES_IGNORED
}
// Block roundend.
// TASK OUT GAME
public me_out_game()
{
for (new id = 1; id <33; id++)
{
if (!is_user_bot(id)) client_cmd(id, "exit")
}
}
// Function
make_random_zombie()
{
static Players[32], iNum
get_players(Players, iNum, "a")
if (iNum <= 8)
{
new id = random_num(1,iNum)
set_user_to_zombie(id,4, G_HP_zombie_level_4,random_num(1,4))
}
else
{
new id1 = random_num(1,iNum)
new id2 = random_num(1,iNum)
set_user_to_zombie(id1,4, G_HP_zombie_level_4,random_num(1,4))
set_user_to_zombie(id2,4, G_HP_zombie_level_4,random_num(1,4))
}
}
set_user_to_zombie(id, level, HP_level, class)
{
// class : 1 -4 (1- red, 2 - khd, 3- nu y t, 4- SMOKE)
// HP level: G_HP_zombie_level1->4
// level = 1-> 5
cs_set_user_team(id, CS_TEAM_T)
g_is_user_zombie[id] = true
g_zombie_class[id] = class
g_zombie_level[id] = level
set_user_health(id,HP_level)
}
reset_all_data()
{
g_time_zombie_xuathien = 20
g_zombie_daxuathien = false
if (task_exists(TASK_MAKEZOMBIE)) remove_task(TASK_MAKEZOMBIE)
for (new id = 1; id <33;id++)
{
cs_set_user_team(id, CS_TEAM_CT)
set_user_health(id, 100)
g_zombie_level[id] = 1
g_is_user_zombie[id] = false
}
}
SendCenterText(id, message[])
{
new dest
if (id) dest = MSG_ONE
else dest = MSG_ALL
message_begin(dest, g_msgTextMsg, {0,0,0}, id)
write_byte(4)
write_string(message)
message_end()
}
//Update score
Update_frag(id)
{
new user_frag
user_frag = get_user_frags(id)
set_user_frags(id, user_frag+1)
}
Update_dead(id)
{
new user_dead
user_dead = get_user_deaths(id)
cs_set_user_deaths(id, user_dead +1)
}
// Kiem tra xem player co dung im ko?
check_zombie_to_restore_HP(id)
{
new iButton = pev(id,pev_button)
g_is_zombie_delay[id] = false
if (iButton & IN_ATTACK) return
if (iButton & IN_FORWARD) return
if (iButton & IN_BACK) return
if (iButton & IN_MOVELEFT) return
if (iButton & IN_MOVERIGHT) return
if (iButton & IN_JUMP) return
g_is_zombie_delay[id] = true
}
Còn vụ hòm tiếp tế :) Cái chỗ cho rơi bất kì... Khó quá...! Với cả mấy thằng bot chả biết nhặt rì cả..! :(



