引用 | 編輯
TheStarChild
2015-05-04 07:19 |
樓主
▼ |
||
x0
希望可以做出這樣的插件出來,我想要讓我的道具價格越買越貴,到下一回合可以自動重置,感恩x0
|
引用 | 編輯
弒血
2015-05-05 23:08 |
3樓
▲ ▼ |
[hide=94]
下面是引用 TheStarChild 於 2015-05-05 20:37 發表的 : 以修改好.. 複製程式 #include <amxmodx> #include <cstrike> #include <engine> #include <fakemeta> #include <fun> #include <hamsandwich> #include <zombieplague> #include <xs> #define SUPPORT_BOT_TO_USE //支援BOT使用.(在最前面加上 // 即取消對BOT的技援) #define Plugin "[ZP] Extra Item: Jumping Zombie [Bot can use ]" #define Version "1.0 [1.2]" #define Author "NiHiLaNTh [HsK]" new const g_PlayerModel[] = "models/zombie_plague/p_grenade_knock.mdl" new const g_ViewModel[] = "models/zombie_plague/v_grenade_infect_WB.mdl" new const g_WorldModel[] = "models/zombie_plague/w_grenade_knock.mdl" new const g_SoundBombExplode[][] = { "zombi/zombi_bomb_exp.wav" } //爆炸sound new const g_SoundBombBO[][] = { "zombi/zombi_bomb_deploy.wav" } //取出sound new const g_szItemName[] = "狂暴手榴彈" new const g_iItemPrice = 1 new g_itemcost[10]; //紀錄最高價格累計空間0-10 new g_itemnum; //紀錄道具購買次數 #define RADIUS 300 //影響地帶 new g_iNadeID new g_MaxPlayers, g_msgAmmoPickup new g_iJumpingNadeCount[33] new g_iExplo // CvarS new cvar_speed #if defined SUPPORT_BOT_TO_USE new g_bot_use[33], Float:bot_a[33] #endif public plugin_init() { register_plugin(Plugin, Version, Author) cvar_speed = register_cvar("zp_zombiebomb_knockback", "1000") //彈走的力度 g_itemcost[0] = g_iItemPrice; //寫入最初空間的值 g_iNadeID = zp_register_extra_item (g_szItemName, g_itemcost[g_itemnum], ZP_TEAM_ZOMBIE) // 寫入 購買空間次數相對值 register_event("CurWeapon", "EV_CurWeapon", "be", "1=1") register_event("HLTV", "event_RoundStart", "a", "1=0", "2=0") // register_event("DeathMsg", "event_Death", "a") register_forward(FM_SetModel, "fw_SetModel") RegisterHam(Ham_Think, "grenade", "fw_ThinkGrenade") #if defined SUPPORT_BOT_TO_USE register_forward(FM_PlayerPreThink, "fwd_PlayerPreThink") #endif g_msgAmmoPickup = get_user_msgid("AmmoPickup") g_MaxPlayers = get_maxplayers() } public plugin_precache() { precache_model (g_PlayerModel) precache_model (g_ViewModel) precache_model (g_WorldModel) new i for (i = 0; i < sizeof g_SoundBombExplode; i++) precache_sound(g_SoundBombExplode) for (i =0; i< sizeof g_SoundBombBO; i++) precache_sound(g_SoundBombBO) precache_sound("items/9mmclip1.wav") precache_sound("items/gunpickup2.wav") g_iExplo = precache_model("sprites/deimosexp.spr") // Spr } public client_connect(id) g_iJumpingNadeCount[id] = 0 public zp_extra_item_selected(id, Item) { if (Item == g_iNadeID) { if (g_iJumpingNadeCount[id] >= 5) { zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + g_itemcost[g_itemnum]) client_print(id, print_chat, "[ZP] 你不能取得更多 狂暴手榴彈 !") return PLUGIN_HANDLED; } give_zp_item(id) g_itemnum++; //紀錄購買次數 g_itemcost[g_itemnum] = (g_itemnum * g_iItemPrice); //儲存購買紀錄跟空間寫入價格 } return PLUGIN_CONTINUE } give_zp_item(id) { if (!zp_get_user_zombie(id) || zp_get_user_nemesis(id)) return; new iBpAmmo = cs_get_user_bpammo(id, CSW_SMOKEGRENADE) if (g_iJumpingNadeCount[id] >= 1) { cs_set_user_bpammo(id, CSW_SMOKEGRENADE, iBpAmmo+1) emit_sound(id, CHAN_ITEM, "items/9mmclip1.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM) AmmoPickup(id,13,1) g_iJumpingNadeCount[id]++ } else { give_item(id,"weapon_smokegrenade") emit_sound(id, CHAN_ITEM, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM) AmmoPickup(id, 13, 1) g_iJumpingNadeCount[id] = 1 } } public zp_user_infected_post(id) { if(zp_get_user_nemesis(id)) g_iJumpingNadeCount[id] = 0 //復仇不可得到 跳彈 else { give_item(id, "weapon_smokegrenade") g_iJumpingNadeCount[id] = 1 emit_sound(id, CHAN_ITEM, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM) AmmoPickup(id, 13, 1) } } public zp_user_humanized_post(id) g_iJumpingNadeCount[id] = 0 #if defined SUPPORT_BOT_TO_USE public fwd_PlayerPreThink(id) { if (!is_user_bot(id)) { g_bot_use[id] = false return FMRES_IGNORED; } if (!zp_get_user_zombie(id) || zp_get_user_nemesis(id)) { g_bot_use[id] = false return FMRES_IGNORED; } new target, hitzone get_user_aiming(id, target, hitzone) if (!(1 <= target <= 32) || !is_user_alive(target) || zp_get_user_zombie(target)) return FMRES_IGNORED; new origin[3], target_origin[3], distance, Float:velocity[3] get_user_origin(id, origin) get_user_origin(target, target_origin) distance = get_distance(origin, target_origin) fm_get_aim_vector(id, 20, velocity) if (!(300 <= distance <= 1000)) return FMRES_IGNORED; if (g_iJumpingNadeCount[id] == 0) { if (g_bot_use[id]) g_bot_use[id] = false new ammo = zp_get_user_ammo_packs(id) new bot_buy = random_num(1, 50) if (bot_buy == 1 || bot_buy == 2 && ammo > g_iItemPrice + 3) { give_zp_item(id) zp_set_user_ammo_packs(id, ammo - g_iItemPrice) } else return FMRES_IGNORED; } if (!g_bot_use[id]) { new will_use[33] will_use[id]=random_num(1, 10) if (will_use[id] < 3) return FMRES_IGNORED; else g_bot_use[id] = true } if (300 <= distance <= 500) bot_a[id]=16.0 else if (501 <= distance <= 700) bot_a[id]=17.0 else if (701 <= distance <= 1000) bot_a[id]=18.0 else if (1001 <= distance <= 1300) bot_a[id]=19.0 else if (1301 <= distance <= 1500) bot_a[id]=20.0 if (g_bot_use[id]) { engclient_cmd(id, "weapon_smokegrenade") set_vector_change_angle2(velocity, 0.0, bot_a[id], velocity) set_pev(id, pev_button, (pev(id, pev_button) | IN_ATTACK)) } return FMRES_IGNORED; } #endif public EV_CurWeapon(id) { if (!is_user_alive(id) || !zp_get_user_zombie(id)) return PLUGIN_CONTINUE new weap_id = get_user_weapon(id) if (g_iJumpingNadeCount[id] > 0 && weap_id == CSW_SMOKEGRENADE) { set_pev(id, pev_viewmodel2, g_ViewModel) set_pev(id, pev_weaponmodel2, g_PlayerModel) emit_sound(id, CHAN_WEAPON, g_SoundBombBO[random_num(0, sizeof g_SoundBombBO-1)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM) } return PLUGIN_CONTINUE } public event_RoundStart() { arrayset(g_iJumpingNadeCount, 0, 33) g_itemnum = 0 //初始化購買次數 } /* public event_Death() { new id = read_data(2) if (!(1 <= id <= 32)) return; set_task(5.0, "off_bomb", id) } public off_bomb(id) g_iJumpingNadeCount[id] = 0 */ public fw_SetModel(Entity, const Model[]) { if (Entity < 0) return FMRES_IGNORED if(pev(Entity, pev_dmgtime) == 0.0) return FMRES_IGNORED new iOwner = entity_get_edict(Entity, EV_ENT_owner) if (g_iJumpingNadeCount[iOwner] >= 1 && equal (Model[7], "w_sm", 4) && zp_get_user_zombie(iOwner)) { #if defined SUPPORT_BOT_TO_USE if (g_bot_use[iOwner]) { new Float:velocity[3] fm_get_aim_vector(iOwner, 30, velocity) g_bot_use[iOwner] = false set_vector_change_angle2(velocity, 0.0, bot_a[iOwner], velocity) } #endif set_pev(Entity, pev_flTimeStepSound, 0) set_pev(Entity, pev_flTimeStepSound, 26517) g_iJumpingNadeCount[iOwner]-- entity_set_model(Entity, g_WorldModel) return FMRES_SUPERCEDE } return FMRES_IGNORED } public fw_ThinkGrenade(Entity) { if (!pev_valid(Entity)) return HAM_IGNORED static Float:dmg_time pev(Entity, pev_dmgtime, dmg_time) if (dmg_time > get_gametime()) return HAM_IGNORED if (pev(Entity, pev_flTimeStepSound) == 26517) { jumping_explode(Entity) return HAM_SUPERCEDE } return HAM_IGNORED } public jumping_explode(Entity) { if (Entity < 0) return; static Float:flOrigin[3] pev(Entity, pev_origin, flOrigin) //爆炸 Spr engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, flOrigin, 0) write_byte(TE_SPRITE) engfunc(EngFunc_WriteCoord, flOrigin[0]) engfunc(EngFunc_WriteCoord, flOrigin[1]) engfunc(EngFunc_WriteCoord, flOrigin[2] + 45.0) write_short(g_iExplo) write_byte(35) write_byte(186) message_end() //爆炸sound emit_sound(Entity, CHAN_WEAPON, g_SoundBombExplode[random_num(0, sizeof g_SoundBombExplode-1)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM) //爆炸影響 for (new i = 1; i < g_MaxPlayers; i++) { if (!is_user_alive(i)) continue new Float:flVictimOrigin[3] pev(i, pev_origin, flVictimOrigin) new Float:flDistance = get_distance_f(flOrigin, flVictimOrigin) if (flDistance <= RADIUS) { new hp = get_user_health(i) new damage = 50 new temp = damage - 5 damage -= floatround(float(temp) * flDistance / float(RADIUS)) new armor = get_user_armor(i) new Float:damage_armor_rate, damage_armor damage_armor_rate = (3.0 / 4.0) //對人類護甲造成傷害的乘數. (護甲傷害值 = 總傷害值 * 乘數) damage_armor = floatround(float(damage) * damage_armor_rate) if (damage_armor > 0 && armor > 0) { if (armor > damage_armor) { damage -= damage_armor set_user_armor(i, armor - damage_armor) } else { damage -= armor set_user_armor(i, 0) } } if (damage > 0) { if (hp > damage) set_user_health(i, hp - damage) else set_user_health(i, 1) } static Float:flSpeed flSpeed = get_pcvar_float(cvar_speed) static Float:flNewSpeed flNewSpeed = flSpeed * (1.0 - (flDistance / RADIUS)) static Float:flVelocity[3] get_speed_vector(flOrigin, flVictimOrigin, flNewSpeed, flVelocity) //彈走的向量 set_pev(i, pev_velocity,flVelocity) screen_shake(i, 12, 7, 12) } } engfunc(EngFunc_RemoveEntity, Entity) } public AmmoPickup(id, AmmoID, AmmoAmount) //得到 跳彈時的圖標 { message_begin(MSG_ONE, g_msgAmmoPickup, _, id) write_byte(AmmoID) write_byte(AmmoAmount) 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() } stock get_speed_vector(const Float:origin1[3],const Float:origin2[3],Float:speed, Float:new_velocity[3]) { new_velocity[0] = origin2[0] - origin1[0] new_velocity[1] = origin2[1] - origin1[1] new_velocity[2] = origin2[2] - origin1[2] new Float:num = floatsqroot(speed*speed / (new_velocity[0]*new_velocity[0] + new_velocity[1]*new_velocity[1] + new_velocity[2]*new_velocity[2])) new_velocity[0] *= num new_velocity[1] *= num new_velocity[2] *= num return 1; } stock fm_get_aim_vector(index, view_distance, Float:view_vector[3]) { new Float:start[3], Float:view_ofs[3]; pev(index, pev_origin, start); pev(index, pev_view_ofs, view_ofs); xs_vec_add(start, view_ofs, start); new Float:vector[3]; pev(index, pev_v_angle, vector); engfunc(EngFunc_MakeVectors, vector); global_get(glb_v_forward, vector); xs_vec_mul_scalar(vector, float(view_distance), view_vector); return 1; } stock set_vector_change_angle2(const Float:velocity[3], Float:angle, Float:vertical_angle, Float:new_velocity[3]) { new Float:v_angles[3] vector_to_angle(velocity, v_angles) v_angles[1] += angle while (v_angles[1] < 0.0) v_angles[1] += 360.0 v_angles[2] += vertical_angle while (v_angles[2] < 0.0) v_angles[2] += 360.0 new Float:v_length v_length = vector_length(velocity) new Float:temp temp = v_length * floatcos(v_angles[2], degrees) new_velocity[0] = temp * floatcos(v_angles[1], degrees) new_velocity[1] = temp * floatsin(v_angles[1], degrees) new_velocity[2] = v_length * floatsin(v_angles[2], degrees) } x0 |
引用 | 編輯
TheStarChild
2015-05-06 08:09 |
4樓
▲ ▼ |
引用 | 編輯
TheStarChild
2015-05-06 10:55 |
6樓
▲ ▼ |
下面是引用 s8720419 於 2015-05-06 08:25 發表的 : 拿一個比較短的程式碼好了,畢竟我也想參考你是怎麼寫陣列的。 初學SMA中有好多不懂的地方。 #include <amxmodx> #include <zombieplague> #define PLUGIN "xiaohua" #define VERSION "1.0" #define AUTHOR "qq561825008" new g_nemesis, name[32] public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) g_nemesis = zp_register_extra_item("购买复仇之神", 88, ZP_TEAM_HUMAN & ZP_TEAM_ZOMBIE) } public zp_extra_item_selected(id, itemid) { if (itemid == g_nemesis) { get_user_name(id, name, 31) set_hudmessage(0, 255, 0, -0.05, -0.45, 1, 0.0, 5.0, 1.0, 1.0, -1) show_hudmessage(0, "%s 购买了复仇之神!!!", name) set_task(1.0, "set_zombie", id) } } public set_zombie(id) { get_user_name(id, name, 31) server_cmd("amx_show_activity 0") server_cmd("zp_nemesis %s", name) server_cmd("amx_show_activity 2") } x0 |
引用 | 編輯
TheStarChild
2015-05-07 07:38 |
8樓
▲ ▼ |