Here is the pre-releae version.
anyone, who feel like it, can contribute!
prt_fild08,138,364,0 script Camp Fire#CF 4_BONFIRE,{
end;
OnRefill:
getmapxy(.@map$, .@x, .@y, UNITTYPE_PC);
getmapxy(.@npc_map$, .@npc_x, .@npc_y, UNITTYPE_NPC);
if (.@map$ != .@npc_map$ || distance(.@npc_x, .@npc_y, .@x, .@y) > .refill_distance || !(issit())) {
@camp_fire_regen = 0;
@camp_fire_tick = 0;
end;
}
if(@camp_fire_regen == 1) {
heal(.refillHP_rate, .refillSP_rate);
} else {
if(@camp_fire_tick >= .camp_fire_delay) {
@camp_fire_regen = 1;
@camp_fire_tick = 0;
dispbottom("You are feeling warm and cozy.");
} else {
@camp_fire_tick++;
}
}
end;
OnTimer500:
getmapxy(.@npc_map$, .@npc_x, .@npc_y, UNITTYPE_NPC);
.@count = getunits(BL_PC, .@units[0], false, .@npc_map$, (.@npc_x - .refill_distance),
(.@npc_y - .refill_distance), (.@npc_x + .refill_distance), (.@npc_y + .refill_distance));
for (.@i = 0; .@i < .@count; ++.@i) {
addtimer(rand(.refill_timer), strnpcinfo(NPC_NAME) + "::OnRefill", .@units[.@i]);
}
initnpctimer();
end;
OnRemoveDup:
deltimer(strnpcinfo(NPC_NAME) + "::OnRefill");
stopnpctimer();
duplicateremove(strnpcinfo(NPC_NAME));
end;
OnInit:
.refillHP_rate = 15; // number of HP to give every refill
.refillSP_rate = 5; // number of SP to give every refill
.refill_distance = 3; // max distance from fire HP/SP regeneration will work
.camp_fire_delay = 5; // Skip how many ticks before feel warm ;)
.refill_timer = 300; // wait rand(X) ms before refil
initnpctimer();
}
function script F_CreateCFDup {
.@nofire_distance = 5; // How far from other NPCs allowed to make fire.
.@fire_duration = 60000; //180000; // 3 minutes (How long will the Camp fire last)
.@curr_char_id = getarg(0);
attachrid(.@curr_char_id);
getmapxy(.@mapname$, .@mapx, .@mapy, UNITTYPE_PC);
if(getmapxy(.@dupe_mapname$, .@dupe_mapx, .@dupe_mapy, UNITTYPE_NPC, sprintf("Camp Fire#CF_%d",.@curr_char_id)) == 0) {
deltimer(sprintf("Camp Fire#CF_%d::OnRemoveDup", .@curr_char_id));
duplicateremove(sprintf("Camp Fire#CF_%d", .@curr_char_id));
}
if(getunits(BL_NPC, .@units[0], false, .@mapname$, (.@mapx - .@nofire_distance),(.@mapy - .@nofire_distance), (.@mapx + .@nofire_distance), (.@mapy + .@nofire_distance)) > 0) {
dispbottom("A fire cannot be started here.");
} else {
soundeffect ("strike-matchstick.wav",0);
duplicatenpc("Camp Fire#CF", "Camp Fire", sprintf("CF_%d", .@curr_char_id), .@mapname$, .@mapx, .@mapy, 0);
addtimer(.@fire_duration, sprintf("Camp Fire#CF_%d::OnRemoveDup", .@curr_char_id));
}
return();
}
Here is in the
intem_db.conf
{
Id: 7035
AegisName: "Matchstick"
Name: "Matchstick"
Type: 2
Buy: 100
Weight: 10
BuyingStore: true
Delay: 15000
Script: <" callfunc("F_CreateCFDup", getcharid(CHAR_ID_CHAR)); ">
},
There is still some work to be done.