引用 | 編輯
epic
2008-11-19 22:10 |
樓主
▼ |
||
x0
插件目的是让受伤的僵尸可以通过买道具(也就是M2菜单里的额外选项)来补回有一定上限的血(目前上限设定的是20000)。目前这个插件能工作,只是不知道为什么补血补得特别的快(从3000HP补到20000HP大概只用10秒),但我在插件里已经设置了每1秒补10血(iHealth += 10)(set_task(1.0, "Task_HealthRegen", id, "b")),不知道问题出在哪,请大家指点我,感谢SMA如下: #include <amxmodx> #include <fun> #include <fakemeta> #include <zombieplague.inc> new const g_item_name[] = { "自动补血 Made by epic" } const g_item_cost = 5 new g_itemid_HealthRegen; new PLUGIN_NAME[] = "HPRegen epic" new PLUGIN_AUTHOR[] = "epic" new PLUGIN_VERSION[] = "2.8" new bool:g_HPRegen[33] public plugin_init() { register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR); g_itemid_HealthRegen = zp_register_extra_item(g_item_name, g_item_cost, ZP_TEAM_ZOMBIE); register_forward(FM_PlayerPreThink, "Task_HealthRegen"); register_event("ResetHUD", "Event_ResetHUD", "be"); register_event("DeathMsg", "Event_DeathMsg", "a"); register_event("HLTV", "EVENT_round_start", "a", "1=0", "2=0"); } public client_connect(id) { g_HPRegen[id] = false } public Event_ResetHUD(id) { if(!is_user_connected(id) || !is_user_alive(id)) { return PLUGIN_CONTINUE } if(g_HPRegen[id]) { if(!task_exists(id)) { set_task(1.0, "Task_HealthRegen", id, "b") } } return PLUGIN_CONTINUE } public Event_DeathMsg() { if(task_exists(read_data(2))) { remove_task(read_data(2)) } } public Task_HealthRegen(id) { if(!is_user_alive(id) || !is_user_connected(id) || !g_HPRegen[id]) { if(task_exists(id)) { remove_task(id) } return PLUGIN_CONTINUE } new iHealth = get_user_health(id) if(iHealth < 20000) { set_hudmessage(0, 255, 0, -1.0, 0.65, 0, 1.0, 2.0, 0.1, 0.1, 4) show_hudmessage(id,"<< !!Healing!! >>") emit_sound(id,CHAN_VOICE,"items/medshot4.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) message_begin(MSG_ONE, get_user_msgid("ScreenFade"), { 0, 0, 0 }, id) write_short(1<<10) write_short(1<<10) write_short(1<<12) write_byte(0) write_byte(0) write_byte(255) write_byte(50) message_end() iHealth += 10 set_user_health(id, iHealth) if(get_user_health(id) > 20000) { emit_sound(id,CHAN_VOICE, "fvox/medical_repaired.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) set_user_health(id, 20000) } } return PLUGIN_CONTINUE } public zp_extra_item_selected(player, itemid) { if (itemid == g_itemid_HealthRegen){ g_HPRegen[player]++; client_print(player, print_chat, "You have now %d HPRegen", g_HPRegen[player]); } } public EVENT_round_start() { for (new id; id <= 32; id++) g_HPRegen[id] = false; } x0
|
引用 | 編輯
牙京
2008-11-21 09:05 |
1樓
▲ ▼ |
很明顯的,,問題出在register_forward(FM_PlayerPreThink, "Task_HealthRegen");
我把 複製程式 register_forward(FM_PlayerPreThink, "Task_HealthRegen"); 然後把 複製程式 public zp_extra_item_selected(player, itemid) { if (itemid == g_itemid_HealthRegen){ g_HPRegen[player]++; client_print(player, print_chat, "You have now %d HPRegen", g_HPRegen[player]); } } 改成 複製程式 public zp_extra_item_selected(id, itemid) { if (itemid == g_itemid_HealthRegen){ set_task(1.0,"Task_HealthRegen",id) g_HPRegen[id]++; client_print(id, print_chat, "You have now %d HPRegen", g_HPRegen[id]); } } public Task_HealthRegen(id) 複製程式 set_task(1.0,"Task_HealthRegen",id) x1 |
引用 | 編輯
epic
2008-11-21 10:15 |
2樓
▲ ▼ |
下面是引用kevin741於2008-11-21 09:05(1樓)發表的 : 太感谢了,晚上到家我试试,谢谢您指点我 x0 |
引用 | 編輯
牙京
2008-11-21 12:05 |
3樓
▲ ▼ |
下面是引用epic於2008-11-21 10:15(2樓)發表的 : 不客氣,,其實我也寫了一個更簡單的,,待我回家才post出來 x0 |
引用 | 編輯
epic
2008-11-21 13:34 |
4樓
▲ ▼ |
下面是引用kevin741於2008-11-21 12:05(3樓)發表的 : 那太好了,那我晚上等你的SMA吧.... x0 |
引用 | 編輯
牙京
2008-11-21 17:45 |
5樓
▲ ▼ |
下面是引用epic於2008-11-21 13:34(4樓)發表的 : 這個是你的,,可以用的了 複製程式 #include <amxmodx> #include <fun> #include <zombieplague.inc> new const g_item_name[] = { "自动补血 Made by epic" } const g_item_cost = 5 new g_itemid_HealthRegen; new PLUGIN_NAME[] = "HPRegen epic" new PLUGIN_AUTHOR[] = "epic" new PLUGIN_VERSION[] = "2.8" new bool:g_HPRegen[33] public plugin_init() { register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR); g_itemid_HealthRegen = zp_register_extra_item(g_item_name, g_item_cost, ZP_TEAM_ZOMBIE); register_event("ResetHUD", "Event_ResetHUD", "be"); register_event("DeathMsg", "Event_DeathMsg", "a"); register_event("HLTV", "EVENT_round_start", "a", "1=0", "2=0"); } public client_connect(id) { g_HPRegen[id] = false } public Event_ResetHUD(id) { if(!is_user_connected(id) || !is_user_alive(id)) { return PLUGIN_CONTINUE } if(g_HPRegen[id]) { if(!task_exists(id)) { set_task(1.0, "Task_HealthRegen", id, "b") } } return PLUGIN_CONTINUE } public Event_DeathMsg() { if(task_exists(read_data(2))) { remove_task(read_data(2)) } } public Task_HealthRegen(id) { if(!is_user_alive(id) || !is_user_connected(id) || !g_HPRegen[id]) { if(task_exists(id)) { remove_task(id) } return PLUGIN_CONTINUE } new iHealth = get_user_health(id) if(iHealth < 20000) { set_hudmessage(0, 255, 0, -1.0, 0.65, 0, 1.0, 2.0, 0.1, 0.1, 4) show_hudmessage(id,"<< !!Healing!! >>") emit_sound(id,CHAN_VOICE,"items/medshot4.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) message_begin(MSG_ONE, get_user_msgid("ScreenFade"), { 0, 0, 0 }, id) write_short(1<<10) write_short(1<<10) write_short(1<<12) write_byte(0) write_byte(0) write_byte(255) write_byte(50) message_end() iHealth += 10 set_user_health(id, iHealth) set_task(1.0,"Task_HealthRegen",id) if(get_user_health(id) > 20000) { emit_sound(id,CHAN_VOICE, "fvox/medical_repaired.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) set_user_health(id, 20000) } } return PLUGIN_CONTINUE } public zp_extra_item_selected(id, itemid) { if (itemid == g_itemid_HealthRegen){ set_task(1.0,"Task_HealthRegen",id) g_HPRegen[id]++; client_print(id, print_chat, "You have now %d HPRegen", g_HPRegen[id]); } } public EVENT_round_start() { for (new id; id <= 32; id++) g_HPRegen[id] = false; } 這是我的做法,,交流一下吧@_@ 複製程式 #include <amxmodx> #include <fun> #include <zombieplague> new g_itemid999 new cvar_hp[] = "kevin_hp" public plugin_init() { register_plugin("[ZP] Additional Extra Items", "0.1", "Example") register_cvar(cvar_hp, "10"); // Register the new items and store their IDs for reference g_itemid999 = zp_register_extra_item("My Extra Item 1", 5, ZP_TEAM_ZOMBIE) } // Item Selected forward public zp_extra_item_selected(id, itemid) { // check if the selected item matches any of our registered ones if (itemid == g_itemid999) client_print(id, print_chat, "你購買了自我復原!"); set_task(1.0,"extra_hpppp",id) } public extra_hpppp(id) { new extra_hp = get_cvar_num(cvar_hp) new maxhp = 20000 new hp = get_user_health(id) if (is_user_alive(id) && (hp < maxhp) && zp_get_user_zombie(id)) { set_user_health(id, hp + extra_hp) set_task(1.0,"extra_hpppp",id) } else { if (is_user_alive(id) && (hp > maxhp)) remove_task(id) } } x0 |
引用 | 編輯
epic
2008-11-21 17:58 |
6樓
▲ ▼ |
下面是引用kevin741於2008-11-21 17:45(5樓)發表的 : 十分感动。希望能和你成为朋友 我的QQ:37222572,如果您不介意,可以加我为好友 x0 |
引用 | 編輯
牙京
2008-11-21 18:37 |
7樓
▲ ▼ |
下面是引用epic於2008-11-21 17:58(6樓)發表的 : 我只有MSN-.- 你有MSN嗎@@?? x0 |