tSome comments added; support for the doctor "sewing you up" after fights with the cops reimplemented - vaccinewars - be a doctor and try to vaccinate the world (HTM) git clone git://src.adamsgaard.dk/vaccinewars (DIR) Log (DIR) Files (DIR) Refs (DIR) README (DIR) LICENSE --- (DIR) commit 45b3eb2326cc81111d7ff463c747868798ed5b62 (DIR) parent a96bd21b0b2002205b654688d053839ca273e99c (HTM) Author: Ben Webb <ben@salilab.org> Date: Sat, 7 Apr 2001 15:21:38 +0000 Some comments added; support for the doctor "sewing you up" after fights with the cops reimplemented Diffstat: M src/serverside.c | 36 +++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) --- (DIR) diff --git a/src/serverside.c b/src/serverside.c t@@ -1166,7 +1166,11 @@ int SendCopOffer(Player *To,char Force) { /* If Force==FORCECOPS, engage in combat with the cops for certain */ /* If Force==FORCEBITCH, offer the client a bitch for certain */ int i; - i=brandom(0,100); + + /* The cops are more likely to attack in locations with higher + police presence ratings */ + i=brandom(0,80+Location[(int)To->IsAt].PolicePresence); + if (Force==FORCECOPS) i=100; else if (Force==FORCEBITCH) i=0; else To->OnBehalfOf=NULL; t@@ -1577,6 +1581,7 @@ void WithdrawFromCombat(Player *Play) { gboolean FightDone; Player *Attack,*Defend; GSList *list; + gchar *text; if (!Play->FightArray) return; t@@ -1609,6 +1614,16 @@ void WithdrawFromCombat(Player *Play) { FirstServer=RemovePlayer(Defend,FirstServer); } else if (Defend->Health==0) { FinishGame(Defend,_("You're dead! Game over.")); + } else if (CanRunHere(Defend) && + brandom(0,100)>Location[(int)Defend->IsAt].PolicePresence) { + Defend->EventNum=E_DOCTOR; + Defend->DocPrice=brandom(Bitch.MinPrice,Bitch.MaxPrice)* + Defend->Health/500; + text=dpg_strdup_printf( + _("YN^Do you pay a doctor %P to sew you up?"), + Defend->DocPrice); + SendQuestion(NULL,C_ASKSEW,Defend,text); + g_free(text); } else { Defend->EventNum=Defend->ResyncNum; SendEvent(Defend); } t@@ -1903,7 +1918,7 @@ void HandleAnswer(Player *From,Player *To,char *answer) { From->Health=100; SendPlayerData(From); } -/* FinishFightWithHardass(From,NULL);*/ + From->EventNum=From->ResyncNum; SendEvent(From); break; } else if (From->EventNum==E_ARRIVE) { if ((answer[0]=='A' || answer[0]=='T') && t@@ -1933,7 +1948,7 @@ void HandleAnswer(Player *From,Player *To,char *answer) { From->EventNum++; SendEvent(From); break; case E_DOCTOR: -/* FinishFightWithHardass(From,NULL);*/ + From->EventNum=From->ResyncNum; SendEvent(From); break; case E_HIREBITCH: case E_GUNSHOP: case E_BANK: case E_LOANSHARK: case E_OFFOBJECT: case E_WEED: t@@ -1941,7 +1956,7 @@ void HandleAnswer(Player *From,Player *To,char *answer) { g_message(_("%s: offer was on behalf of %s"),GetPlayerName(From), GetPlayerName(From->OnBehalfOf)); if (From->Bitches.Price && From->EventNum==E_OFFOBJECT) { - text=g_strdup_printf(_("%s has rejected your %s!"), + text=dpg_strdup_printf(_("%s has rejected your %tde!"), GetPlayerName(From),Names.Bitch); GainBitch(From->OnBehalfOf); SendPlayerData(From->OnBehalfOf); t@@ -2089,15 +2104,21 @@ int LoseBitch(Player *Play,Inventory *Guns,Inventory *Drugs) { } void SetFightTimeout(Player *Play) { +/* If fight timeouts are in force, sets the timeout for the given player. */ if (FightTimeout) Play->FightTimeout=time(NULL)+(time_t)FightTimeout; else Play->FightTimeout=0; } void ClearFightTimeout(Player *Play) { +/* Removes any fight timeout for the given player. */ Play->FightTimeout=0; } int AddTimeout(time_t timeout,time_t timenow,int *mintime) { +/* Given the time of a pending event in "timeout" and the current time in */ +/* "timenow", updates "mintime" with the number of seconds to that event, */ +/* unless "mintime" is already smaller (as long as it's not -1, which */ +/* means "uninitialized"). Returns 1 if the timeout has already expired. */ if (timeout==0) return 0; else if (timeout<=timenow) return 1; else { t@@ -2107,6 +2128,9 @@ int AddTimeout(time_t timeout,time_t timenow,int *mintime) { } int GetMinimumTimeout(GSList *First) { +/* Returns the number of seconds until the next scheduled event. If such */ +/* an event has already expired, returns 0. If no events are pending, */ +/* returns -1. "First" should point to a list of valid players. */ Player *Play; GSList *list; int mintime=-1; t@@ -2124,6 +2148,10 @@ int GetMinimumTimeout(GSList *First) { } GSList *HandleTimeouts(GSList *First) { +/* Given a list of players in "First", checks to see if any events */ +/* have timed out, and if so, performs the necessary actions. The */ +/* new start of the list is returned, since a player may be removed */ +/* if their ConnectTimeout has expired. */ GSList *list,*nextlist; Player *Play; time_t timenow;