引用 | 編輯
55331200
2010-06-10 15:56 |
樓主
▼ |
||
x0
請問如何把一種道具限制要權限才可購買呢?例如: #include <amxmodx> #include <fakemeta> #include <hamsandwich> #include <zombieplague> #define SUPPORT_BOT_TO_USE new g_laserspr, g_bloodspr new g_haha new g_entity_damage, g_entity_chance new g_cost new bool:Bought[33] public plugin_init() { register_plugin("[ZP] Extra: 致命攻擊", "1.0", "MyChat數位男女會員:Rubbish-Nec") RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage") register_event("HLTV", "event_RoundStart", "a", "1=0", "2=0") register_event("DeathMsg", "event_Death", "a") g_cost = register_cvar("zp_da_cost", "1") g_entity_damage = register_cvar("zp_da_entity_damage", "2.5") g_entity_chance = register_cvar("zp_da_entity_chance", "10") g_haha = zp_register_extra_item("致命攻擊", get_pcvar_num(g_cost), ZP_TEAM_HUMAN) } public plugin_precache() { g_laserspr = precache_model("sprites/white.spr") g_bloodspr = precache_model("sprites/blood.spr") } public zp_extra_item_selected(id, itemid) { if (itemid == g_haha) { if (Bought[id]) { zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + get_pcvar_num(g_cost)) client_print(id, print_chat, "[ZP] 你已經買了致命攻擊。") } else { client_print(id, print_chat, "[ZP] 你買了致命攻擊,攻擊敵人有機會造成更大傷害。") Bought[id] = true } } } public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type) { if (victim != attacker && is_user_connected(attacker)) { if (!zp_get_user_zombie(attacker) && zp_get_user_zombie(victim)) { if (Bought[attacker]) { if (random_num(1,100) <= get_pcvar_num(g_entity_chance)) { static origin[3] get_user_origin(victim, origin, 0) show_laser(attacker, origin) //particle_burst_effect(origin) create_blood(origin) screen_shake(victim, 4, 2, 5) damage *= get_pcvar_num(g_entity_damage) SetHamParamFloat(4, damage) } } } } } public zp_user_infected_post(id, infector) { Bought[id] = false } public client_connect(id) { Bought[id] = false } public client_disconnect(id) { Bought[id] = false } public event_Death() { new id = read_data(2) if (!(1 <= id <= get_maxplayers())) return; Bought[id] = false } public event_RoundStart() { for (new i = 1; i <= 32; i++) { Bought = false } } #if defined SUPPORT_BOT_TO_USE public zp_round_started(gamemode, id) { if (is_user_bot(id) && is_user_connected(id) && is_user_alive(id) && !zp_get_user_zombie(id)) { if (!Bought[id] && zp_get_user_ammo_packs(id) >= get_pcvar_num(g_cost) * 1.5) { Bought[id] = true zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) - get_pcvar_num(g_cost)) } } } #endif new Debug public client_putinserver(id) { if (Debug == 1) return; new classname[32] pev(id, pev_classname, classname, charsmax(classname)) if (!equal(classname, "player")) { Debug = 1 set_task(1.0, "_Debug", id) } } public _Debug(id) { RegisterHamFromEntity(Ham_TakeDamage, id, "fw_TakeDamage") } public show_laser(id, const origin[3]) { if (!is_user_alive(id) || zp_get_user_zombie(id)) return; // Laser beam. message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte (TE_BEAMENTPOINT) write_short(id ) //(id | 0x1000) write_coord(origin[0]) // x = horizontal /\ write_coord = position write_coord(origin[1]) // y = vertical write_coord(origin[2]) // z = ??? write_short(g_laserspr) // The sprite write_byte(0) // framestart write_byte(0) // framerate write_byte(2) // Life write_byte(10) // Width write_byte(0) // Noise ? write_byte(200) // Red | R,G,B write_byte(50) // Green | R,G,B write_byte(50) // BLUE | R,G,B write_byte(200) // Brightness. write_byte(200) // Speed. message_end() } stock particle_burst_effect(const origin[3]) { // Particle burst message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(TE_PARTICLEBURST) // TE id: 122 write_coord(origin[0]) // x write_coord(origin[1]) // y write_coord(origin[2]) // z write_short(20) // radius write_byte(70) // color write_byte(3) // duration (will be randomized a bit) message_end() } stock create_blood(const origin[3]) { // Blood for (new i = 0; i < 4; i++) { new x, y, z x = random_num(-50, 50) y = random_num(-50, 50) z = random_num(0, 50) for (new j = 0; j < 2; j++) { message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(TE_BLOODSPRITE) write_coord(origin[0]+(x*j)) write_coord(origin[1]+(y*j)) write_coord(origin[2]+(z*j)) write_short(g_bloodspr) write_short(g_bloodspr) write_byte(229) // color index write_byte(15) // size message_end() } } } stock screen_shake(id, amplitude = 4, duration = 2, frequency = 10) { message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("ScreenShake"), _, id) write_short((1<<12)*amplitude) // 振幅 write_short((1<<12)*duration) // 時間 write_short((1<<12)*frequency) // 頻率 message_end() } 要怎辦呢? 我試過 && get_user_flags(id) & ADMIN_LEVEL_A http://bbs.mychat.to/reads.php?tid=864080&keyword=%E6%AC%8A%E9%99%90 可是他彈出錯誤啊 好像是說(id)有錯誤...... x0
|
引用 | 編輯
calove00
2010-07-20 19:22 |
2樓
▲ ▼ |
#include <amxmodx>
#include <fakemeta> #include <hamsandwich> #include <zombieplague> #define SUPPORT_BOT_TO_USE new g_laserspr, g_bloodspr new g_haha new g_entity_damage, g_entity_chance new g_cost new bool:Bought[33] public plugin_init() { register_plugin("[ZP] Extra: 致命攻擊", "1.0", "MyChat數位男女會員:Rubbish-Nec") RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage") register_event("HLTV", "event_RoundStart", "a", "1=0", "2=0") register_event("DeathMsg", "event_Death", "a") g_cost = register_cvar("zp_da_cost", "1") g_entity_damage = register_cvar("zp_da_entity_damage", "2.5") g_entity_chance = register_cvar("zp_da_entity_chance", "10") g_haha = zp_register_extra_item("致命攻擊", get_pcvar_num(g_cost), ZP_TEAM_HUMAN) } public plugin_precache() { g_laserspr = precache_model("sprites/white.spr") g_bloodspr = precache_model("sprites/blood.spr") } public zp_extra_item_selected(id, itemid) { if (itemid == g_haha) { if (Bought[id]) { zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + get_pcvar_num(g_cost)) client_print(id, print_chat, "[ZP] 你已經買了致命攻擊。") } else if(get_user_flat(id) & ADMIN_LEVEL_A) { client_print(id, print_chat, "[ZP] 你買了致命攻擊,攻擊敵人有機會造成更大傷害。") Bought[id] = true } else { client_print(id, print_center, "你沒有此權限") } } } public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type) { if (victim != attacker && is_user_connected(attacker)) { if (!zp_get_user_zombie(attacker) && zp_get_user_zombie(victim)) { if (Bought[attacker]) { if (random_num(1,100) <= get_pcvar_num(g_entity_chance)) { static origin[3] get_user_origin(victim, origin, 0) show_laser(attacker, origin) //particle_burst_effect(origin) create_blood(origin) screen_shake(victim, 4, 2, 5) damage *= get_pcvar_num(g_entity_damage) SetHamParamFloat(4, damage) } } } } } public zp_user_infected_post(id, infector) { Bought[id] = false } public client_connect(id) { Bought[id] = false } public client_disconnect(id) { Bought[id] = false } public event_Death() { new id = read_data(2) if (!(1 <= id <= get_maxplayers())) return; Bought[id] = false } public event_RoundStart() { for (new i = 1; i <= 32; i++) { Bought = false } } #if defined SUPPORT_BOT_TO_USE public zp_round_started(gamemode, id) { if (is_user_bot(id) && is_user_connected(id) && is_user_alive(id) && !zp_get_user_zombie(id)) { if (!Bought[id] && zp_get_user_ammo_packs(id) >= get_pcvar_num(g_cost) * 1.5) { Bought[id] = true zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) - get_pcvar_num(g_cost)) } } } #endif new Debug public client_putinserver(id) { if (Debug == 1) return; new classname[32] pev(id, pev_classname, classname, charsmax(classname)) if (!equal(classname, "player")) { Debug = 1 set_task(1.0, "_Debug", id) } } public _Debug(id) { RegisterHamFromEntity(Ham_TakeDamage, id, "fw_TakeDamage") } public show_laser(id, const origin[3]) { if (!is_user_alive(id) || zp_get_user_zombie(id)) return; // Laser beam. message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte (TE_BEAMENTPOINT) write_short(id ) //(id | 0x1000) write_coord(origin[0]) // x = horizontal /\ write_coord = position write_coord(origin[1]) // y = vertical write_coord(origin[2]) // z = ??? write_short(g_laserspr) // The sprite write_byte(0) // framestart write_byte(0) // framerate write_byte(2) // Life write_byte(10) // Width write_byte(0) // Noise ? write_byte(200) // Red | R,G,B write_byte(50) // Green | R,G,B write_byte(50) // BLUE | R,G,B write_byte(200) // Brightness. write_byte(200) // Speed. message_end() } stock particle_burst_effect(const origin[3]) { // Particle burst message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(TE_PARTICLEBURST) // TE id: 122 write_coord(origin[0]) // x write_coord(origin[1]) // y write_coord(origin[2]) // z write_short(20) // radius write_byte(70) // color write_byte(3) // duration (will be randomized a bit) message_end() } stock create_blood(const origin[3]) { // Blood for (new i = 0; i < 4; i++) { new x, y, z x = random_num(-50, 50) y = random_num(-50, 50) z = random_num(0, 50) for (new j = 0; j < 2; j++) { message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(TE_BLOODSPRITE) write_coord(origin[0]+(x*j)) write_coord(origin[1]+(y*j)) write_coord(origin[2]+(z*j)) write_short(g_bloodspr) write_short(g_bloodspr) write_byte(229) // color index write_byte(15) // size message_end() } } } stock screen_shake(id, amplitude = 4, duration = 2, frequency = 10) { message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("ScreenShake"), _, id) write_short((1<<12)*amplitude) // 振幅 write_short((1<<12)*duration) // 時間 write_short((1<<12)*frequency) // 頻率 message_end() } 路過 x0 |