这两天写了个给僵尸加血的插件,遇到一个问题,百思不得其解

Home Home
引用 | 編輯 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樓)發表的 :
很明顯的,,問題出在register_forward(FM_PlayerPreThink, "Task_HealthRegen");
我把
複製程式
register_forward(FM_PlayerPreThink, "Task_HealthRegen");
刪去
然後把
.......

太感谢了,晚上到家我试试,谢谢您指点我

獻花 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樓)發表的 :


不客氣,,其實我也寫了一個更簡單的,,待我回家才post出來 表情


那太好了,那我晚上等你的SMA吧.... 表情

獻花 x0
引用 | 編輯 牙京
2008-11-21 17:45
5樓
  
下面是引用epic於2008-11-21 13:34(4樓)發表的 :
 

那太好了,那我晚上等你的SMA吧.... 表情

這個是你的,,可以用的了
複製程式
#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樓)發表的 :

這個是你的,,可以用的了
[code]#include <amxmodx>
#include <fun>
#include <zombieplague.inc>
.......


十分感动。希望能和你成为朋友

我的QQ:37222572,如果您不介意,可以加我为好友

獻花 x0
引用 | 編輯 牙京
2008-11-21 18:37
7樓
  
下面是引用epic於2008-11-21 17:58(6樓)發表的 :
 

十分感动。希望能和你成为朋友

我的QQ:37222572,如果您不介意,可以加我为好友

我只有MSN-.-
你有MSN嗎@@??

獻花 x0
引用 | 編輯 epic
2008-11-26 13:32
8樓
  
下面是引用kevin741於2008-11-21 18:37(7樓)發表的 :


我只有MSN-.-
你有MSN嗎@@??


我没有MSN

獻花 x0
引用 | 編輯 w5014560
2009-05-21 17:16
9樓
  
插件代码是Upgrades mod 2.0

獻花 x0