#include "alignment.h" inherit "/std/object"; int *align_array = ({ }); string curved_align_string(object ob); void save_function() { if(sizeof(align_array)) save_object("/save/aligntracker"); } void restore_function() { if(!sizeof(align_array)) restore_object("/save/aligntracker"); } void reset_align_array() { int i; for(i=0; i<sizeof(align_array); i++) align_array[i] = 330; save_function(); } void setup() { set_name("aligntracker"); restore_function(); } int check_player_al(object leave) { int i,tim_on,reset_time,aint; if(leave) { if(!interactive(leave)) return 0; if(leave->query_creator() || strsrch(leave->query_name(),"test") != -1) return 0; if(!(leave->query_property("alignment_reset2"))) { leave->add_property("alignment_reset2",leave->query_time_on()+1); leave->remove_property("alignment_reset"); return leave->set_align(0); } //tell_object(find_player("anirudh"),leave->query_time_on()+" "+leave->query_property("alignment_reset2")+" "+leave->query_name()+"\n"); if(!(leave->query_timed_property("alignment_checked2")) && ((tim_on=leave->query_time_on()) < -AL_CHK_RATE) && (((reset_time=leave->query_property("alignment_reset2"))-tim_on) >AL_CHK_RATE)) { if((aint=leave->query_align_int()) > 0.9*MAX_ALIGN_INT) return 0; if(aint < -0.9*MAX_ALIGN_INT) return 0; restore_function(); if(sizeof(align_array) <= NUM_SAVED) { for(i=sizeof(align_array);i<=NUM_SAVED;i++) align_array += ({330}); } for(i=NUM_SAVED-1;i>=0;i--) { align_array[i+1] = align_array[i]; } align_array[0] = (aint+0.0)/(tim_on-reset_time+0.0)*(0.0-TDIV); leave->add_timed_property("alignment_checked2",1,AL_CHK_RATE/2); } save_function(); return align_array[0]; } return 0; } int curved_align_num(object obj) { switch(curved_align_string(obj)) { case "diabolical": return 10000; case "extremely evil": return 3500; case "very evil": return 1500; case "evil": return 600; case "neutral": return 0; case "good": return -600; case "very good": return -1500; case "extremely good": return -3500; case "angelic": return -10000; } return 0; } string curved_align_string(object obj) { int i, lt, al, aint; restore_function(); if(!(obj->query_time_on())) return 0; if(obj) { aint = obj->query_align_int(); if(aint > 0.9*MAX_ALIGN_INT) return "diabolical"; if(aint < -0.9*MAX_ALIGN_INT) return "angelic"; al = (aint+0.0)/(obj->query_time_on()-(obj-> query_property("alignment_reset2"))+0.0)*(0.0-TDIV); } else return 0; if(sizeof(align_array) <= NUM_SAVED) { for(i=sizeof(align_array);i<=NUM_SAVED;i++) align_array += ({330}); } for(i=0;i<NUM_SAVED;i++) { if(al <= align_array[i]) lt++; } lt = lt*100/NUM_SAVED; switch(lt) { case -1 .. A_E_E: return "diabolical"; case 1+A_E_E .. A_V_E: return "extremely evil"; case 1+A_V_E .. A_EV: return "very evil"; case 1+A_EV .. A_NE: return "evil"; case 1+A_NE .. A_GO: return "neutral"; case 1+A_GO .. A_V_G: return "good"; case 1+A_V_G .. A_E_G: return "very good"; case 1+A_E_G .. A_AN: return "extremely good"; default: return "angelic"; break; } } int *query_align_array() { return align_array; } void dest_me() { save_function(); ::dest_me(); }